15

Nous avons un fichier C++ Win32 .exe créé avec Visual Studio 2005 qui fonctionne parfaitement sur toutes les machines que nous avons testées en interne (XP 32 bits, Vista 32 bits & Windows 7 64 bits). Mais bien sûr, il se bloque à plusieurs reprises sur la machine Vista 32 bits d'un client.Déboguer la version de build sur la machine d'un client

En fouillant sur plusieurs sites, j'ai trouvé petits morceaux qui indiquent si j'expédier les PDB (vc80.pdb & projectName .pdb) ainsi que la construction de sortie de l'exécutable au client, il y a une certaine façon de générer minidumps quand un accident se produit. Je peux ensuite charger le vidage sur incident dans Visual Studio et obtenir une trace de pile et d'autres informations utiles. L'utilitaire Dr. Watson de Microsoft semble également être impliqué dans ce processus.

Mais je ne peux pas trouver des instructions claires sur les étapes à suivre pour ce faire

  • quels fichiers à expédier?
  • comment générer une image de vidage sur incident?
  • et comment charger ceci dans VS?

Quelqu'un peut-il s'il vous plaît décrire ce processus?

+1

Je ne pense pas que Dr. Watson est garanti d'exister dans Vista et plus tard. –

Répondre

10

Nous sommes en mesure d'obtenir des vidages sur incident à partir de notre version libère sur le terrain et n'ont pas besoin d'expédier les fichiers pdb avec notre produit.

Nous construisons des appels pour créer le fichier se vidage sur incident dans notre gestionnaire d'exceptions niveau supérieur à l'aide, je crois MiniDumpWriteDump(). Mais même sans cela, vous pouvez demander à l'utilisateur de générer le fichier de crash au moment de l'incident en utilisant le gestionnaire de tâches que je crois comme mentionné ici: MSDN Instructions for creating dump file.

Une fois que vous avez le fichier de vidage, les fermetures éclair du client et l'envoie à vous et vous le déposez sur Visual Studio. Au sein de VS, vous puis choisissez Debug natif mixte ou de débogage et utilise la copie locale des années pdb pour vous montrer la pile d'appels, etc.

Example from a dump I just created from a MS process

2

Je l'ai fait il y a quelque temps et je pense que je suivais this guide. Si cela ne fonctionne pas, consultez l'utilitaire Windbg, je rappelle que vous n'avez pas besoin de l'installer, juste copier et exécuter, même à partir d'une clé USB

+0

J'ai vu cet article CodeProject, mais il semblait terriblement daté (publié en 2002, et contient des instructions pour VS.Net 2003). Savez-vous s'il est applicable à VS2005? (Je sais que le compilateur est ancien aussi, mais je dois travailler avec). WinDbg semble prometteur ... +1 – Praetorian

+0

Quand je l'ai fait, j'ai utilisé VS2008. C'est certainement possible, mais vous devrez peut-être faire quelques réglages –

5

Je ressens votre douleur. Je devais le faire il y a un moment.

Quoi qu'il en soit, avez-vous essayé google Breakpad?

Breakpad est une bibliothèque et une suite d'outils qui vous permet de distribuer une application aux utilisateurs ayant fourni le compilateur des informations de débogage supprimé, les accidents d'enregistrement dans les fichiers « Minidump » compacts, envoyez-les revenir à votre serveur, et produire des traces de pile C et C++ à partir de ces minidumps. Breakpad peut également écrire minidumps sur demande pour les programmes qui ont pas écrasé.

Breakpad est actuellement utilisé par Google Chrome, Firefox, Google Picasa, Camino, Google Earth, et d'autres projets

Vous pouvez le trouver ici: http://code.google.com/p/google-breakpad/

Il fait la même chose que la autres réponses mentionnées, mais il le fait automatiquement, vous économisant beaucoup de temps et d'efforts

+0

BReakpad a l'air plutôt cool. Merci de le mentionner. – jschroedl

6

Le processus que vous devriez avoir ressemble à ceci:

  1. Compilez un exécutable et générez un fichier PDB. Assurez-vous de ne pas apporter de modifications au code utilisé pour l'exécutable ou de conserver une sauvegarde.
  2. Expédiez l'exécutable au client. Pas besoin d'expédier le fichier PDB. La seule raison de l'expédier est si vous souhaitez déboguer sur la machine du client, ou utiliser des outils comme Process Explorer pour obtenir une trace de pile avec des noms de fonction à un moment donné. Aucun ne semble être applicable dans votre cas.
  3. S'il s'agit d'une machine XP/2003, utilisez drwtsn32 pour configurer la création d'un vidage sur incident. Si c'est Vista/7/2008, drwtsn32 est retiré et vous devez configurer WER instead. Une autre option utilise ADPlus pour lancer votre application.
  4. Une fois le blocage survenu, renvoyez-vous le cliché et chargez-le dans Visual Studio. Vous devez avoir exactement le même code, exécutable et PDB à portée de main afin de déboguer en douceur.

Note:

  • WinDbg est utile pour le débogage sur l'environnement de production. C'est un débogueur très puissant et portable, mais si vous êtes habitué à VS, vous serez plus à l'aise pour l'utiliser.
  • Si vous créez un minidump, vous obtiendrez des traces de pile et certaines valeurs de variables. Si vous créez un vidage complet, vous obtiendrez le tas complet, y compris toutes les variables - et un fichier de vidage beaucoup plus grand ... Si le transfert n'est pas un problème, utilisez des vidages complets.
  • Si vous register at Microsoft, vous pouvez avoir accès aux vidages créés lorsque votre programme se bloque sur les sites clients. C'est ennuyeux "Envoyer les informations à Microsoft?" fenêtre que vous obtenez lorsque un processus se bloque qui envoie la décharge à MS, et vous y avoir accès ...
1

Si votre client utilise Vista SP1 ou supérieur, vous pouvez configurer le système pour générer un fichier de vidage local chaque fois qu'une application tombe en panne. Vous pouvez trouver la documentation complète sur le MSDN site.

Vous pouvez garder toutes vos PDB privées. Ceux-ci ne sont nécessaires que lorsque vous analysez réellement le fichier de vidage.Si vous voulez garder une trace des PDB correspondant aux versions du produit que vous expédiez, vous devriez fortement envisager d'utiliser un serveur de symboles.

Questions connexes