Nous avons un composant COM Delphi appelé à partir d'une application Web ISAPI. Le composant COM suspend l'application car il essaie d'afficher un MessageBox(). Nous n'avons pas d'appel MessageBox() dans notre code utilisateur, il doit donc être situé dans la source d'exécution Delphi, probablement dans le code du gestionnaire d'exception.Comment utiliser le rapport IIS Debug Diagnostics pour localiser la ligne du fichier source dans le composant COM Delphi
Nous avons un rapport de diagnostic de débogage IIS qui montre notre nom de module + une adresse de décalage comme le code incriminé.
Nous avons un fichier .MAP pour notre module et nous avons également produit un fichier .dbg en utilisant MAP2DBG.
Notre question est de savoir comment localiser la ligne de code du fichier source en utilisant le rapport IIS debug diag hang report contenant l'adresse de décalage, en utilisant le fichier .MAP ou .DBG?
Nous avons essayé d'utiliser WinDbg mais n'avons pas été capables de comprendre ce que nous devions faire pour localiser la ligne source.
+1 Bonne réponse. Le fichier de carte est la clé pour trouver le bogue, et la compréhension du fichier de carte est le secret pour trouver ces erreurs AV embêtantes qui apparaissent après le déploiement. J'ai tendance à garder les fichiers MAP dans le contrôle de la source étiquetés avec la source à une version pour cette raison. – skamradt
Le rapport de débogage IIS sur le fichier de vidage répertorie ModuleName + 4974 comme adresse incriminée. En utilisant WinDbg pour charger le fichier de vidage, le début du module est 064F0000. Donc 064F4974 - 064F000 = 4974. 4974 - 1000 est 3974. Je ne vois rien dans le fichier .map même proche de ce nombre. Qu'est-ce que je rate? –
Dans votre fichier de carte, vous devriez avoir une section très près du sommet appelée «Liste détaillée des segments». Dans cette section, la toute première ligne ressemble à ceci dans un fichier de carte: 0001: 00000000 00006B49 C = CODE S = .text G = (aucun) M = Système ACBP = A9 Ceci est un segment de type 1 (. texte) qui commence à 0 et exécute $ 6B49 octets. Si c'était votre fichier map, il me dirait que votre module est le module 'System'. Maintenant, étant donné que vous avez identifié votre module, il devrait y avoir une section comme celle-ci pour ce module: "Numéros de ligne pour le système (GETMEM.INC) segment .text". –