Question

J'ai développé un programme par un client qui fait l'expérience, quand il ne une certaine opération.Ce n'est pas passe toujours à la même place et les mêmes données, et, d'ailleurs, il n'est pas le cas, ni dans mon local de développement de la machine, ni dans mon test de la Machine Virtuelle (qui est libre de tout matériel de développement).

Compte tenu de ces conditions, j'ai décidé de compiler avec la CARTE (activé dans la Configuration des Propriétés-> Linker->Débogueur avec l'option /CARTE) voir la fonction est à l'origine de crash.

Si j'ai bien compris, lorsque le programme crash j'ai vérifier en bas de l'erreur de décalage et puis, recherche dans ma CARTE dans la colonne de la RVA+BASE:

     Address                         Publics by Value                                      Rva+Base       Lib:Object
 0001:00037af0       ?PersonalizzaPlancia@CDlgGestioneDatiProgetto@MosaicoDialogs@@IAEXXZ 00438af0 f   DlgGestioneDatiProgetto.obj
 0001:00038000       ?SalvaTemporanei@CDlgGestioneDatiProgetto@MosaicoDialogs@@IAEXXZ 00439000 f   DlgGestioneDatiProgetto.obj

En fait, mon accident se produit à l'offset:

00038C90
Donc, je pense que c'est quelque part dans la méthode:

MosaicoDialogs::CDlgGestioneDatiProgetto::PersonalizzaPlancia

mais ce n'est absolument pas possible, donc en supposant que l'ordinateur ne peut pas être mauvais, je suis celui qui est mauvais.

Quelqu'un peut-il m'expliquer comment lire la CARTE dans le bon chemin?

Était-ce utile?

La solution

La lecture de fichiers de la CARTE pour trouver le lieu de l'écrasement est expliqué bien dans ce projet de code de l'article.

http://www.codeproject.com/Articles/3472/Finding-crash-information-using-the-MAP-file

Espoir aide.

Autres conseils

ne vous embêtez pas - au lieu de cela, construire le projet avec les symboles de permis et la bande dans un fichier pdb.

Modifier le programme, un peu, d'écrire un minidump quand il se bloque à l'aide d'un gestionnaire d'exceptions non gérées

Donner le nouveau programme compilé pour le client, et quand il se bloque appel MiniDumpWriteDump.

Demander au client d'envoyer cette .fichier dmp pour vous, et il vous suffit alors de le charger dans Visual Studio (ou WinDbg) et il va correspondre les symboles pour le programme, et sera également correspondre le code.Vous devriez être capable de voir exactement la ligne de code et les variables impliquées.(si vous utilisez VS, lorsque vous chargez le .fichier dmp, en haut à droite de l'écran une option "démarrer le débogage" cliquez sur ce que cela va démarrer le débogage' au point de le bloquer)

Essayez d'abord localement de mettre un div par zéro erreur quelque part dans votre programme et voir si vous pouvez déboguer le vidage après son exécution.Notez que vous devez garder exactement le même fichier de symboles pour chaque version de votre programme - ils correspondre exactement.Vous ne pouvez pas s'attendre à un fichier de symboles pour un build pour correspondre à un autre build, même si rien n'a changé.

Il ya des tutoriels pour ce genre de chose, comme celui de la CodeProject qui dirait qu'il décrit ce dont vous avez besoin.

Pour le post-mortem de débogage, il y a une alternative qui permettrait d' pas nécessaire l'utilisation d'un fichier de carte.Plutôt, elle aurait besoin de vous pour créer un simple script de registre afin de permettre à certains WER (Rapport d'Erreurs Windows) indicateurs de piéger le fichier de vidage sur incident.Tout d'abord, créer votre application avec les symboles de débogage.Ensuite, suivez les instructions pour La Collecte En Mode Utilisateur Dumps.En gros, vous créez une sous-clé dans le cadre du "LocalDumps" clé.Cette sous-clé doit être le nom de votre application, par exemple, "myapplication.exe".Ensuite, créer le "DumpCount", "DumpType", et "DumpFolder" les clés/valeurs.Demandez à l'utilisateur d'exécuter le script de registre.Cela permettra de piégeage de la décharge locale.Ensuite, demandez à l'utilisateur de la force de la collision afin de recueillir le fichier de vidage.L'utilisateur peut ensuite envoyer le fichier de dump de débogage en utilisant les symboles que vous avez créé plus tôt.Enfin, vous aurez besoin de créer un script de registre supprime les clés/valeurs ajoutées au registre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top