Question

J'essaie de générer une version pour une application C ++ que j'ai écrite. L'application fonctionne correctement (débogage et libération) lorsque vous l'exécutez à partir de VS2008; mais lorsque vous exécutez l'exécutable, il se bloque presque à chaque fois.

Maintenant, y a-t-il un hack pour que je puisse exécuter cette application en tant qu'application autonome sans avoir à parcourir tout le code et à rechercher le bogue qui l'a provoqué?

Merci d'avance.

Était-ce utile?

La solution

En bref, non.

vous devrez trouver le bogue, si cela fonctionne dans VS, alors je suppose que c’est un problème de timing, vous écrasez peut-être des données de thread partagées, cela serait moins probable (bien que possible). voir) à l'intérieur de VS en cours d'exécution dans un environnement de débogage, ce qui le ralentit un peu.

Si vous souhaitez obtenir de l'aide pour trouver votre bogue, dites-nous-en plus. Sinon, construisez votre version avec les symboles de débogage (pdbs), installez DrWatson en tant que débogueur système et exécutez-le en mode autonome. Lorsqu'il se bloque, DrWatson crée un fichier minidump, chargez-le dans WinDbg (mon préféré) et vous pourrez voir exactement où se trouve votre bogue (il vous dira même que le dump contient une exception et vous le montrera par défaut. Vous devez ajouter le chemin de votre code source et celui de vos symboles dans WinDbg pour que cela soit fait correctement.

Vous saurez également comment diagnostiquer les blocages lorsque l'application est également exécutée sur site.

Autres conseils

Chargez-vous des ressources externes? Si vous vérifiez que vos chemins relatifs sont corrects dans le programme C ++.

Une des possibilités est que votre programme utilise des données de segment non initialisées . Le lancement d'un programme à partir du débogueur active le tas de débogage NT, ce qui oblige l'allocateur de tas à remplir de nouveaux blocs de mémoire avec un motif de remplissage et permet également une vérification du tas. Lancer le même programme en dehors du débogueur laisse le tas de débogage NT désactivé, mais si le programme était lié à la version de débogage du runtime C, le tas de débogage CRT sera toujours activé.

Une possibilité beaucoup moins probable est que votre programme nécessite SeDebugPrivilege à définir dans son jeton de processus . Le débogueur active ce privilège dans son jeton de processus, ce qui a pour effet secondaire que tous les programmes lancés à partir du débogueur héritent de ce privilège. Si votre programme tente d'utiliser OpenProcess () / ReadProcessMemory () / WriteProcessMemory () et ne gère pas les erreurs correctement, il est concevable qu'il pourrait tomber en panne.

Il y a quelques possibilités. Outre ce qui a déjà été mentionné, l'exécution d'une application à partir de Visual Studio s'exécutera dans le même contexte de sécurité que l'instance de Visual Studio. Ainsi, si, par exemple, vous travaillez sur Vista, vous risquez de rencontrer une violation de sécurité non gérée si vous essayez d'accéder à des fichiers protégés ou au registre.

Et si vous construisez une version de débogage et que vous l'exécutez de manière autonome? Est-ce que ça plante? Si tel est le cas, vous pouvez généralement accéder au débogueur à partir de cet emplacement et obtenir une pile d'appels pour connaître le dysfonctionnement.

D'après les détails que vous avez donnés, il semblerait qu'il y ait un problème avec la bibliothèque. Exécutez-vous le programme sur le même ordinateur? Sinon, vous devrez également déployer les bibliothèques appropriées pour votre application. Si vous exécutez sur le même ordinateur mais en dehors de l’environnement dev, assurez-vous que votre application peut voir les bibliothèques appropriées.

Le meilleur moyen que j'ai trouvé de déboguer dans cette version est de créer un vidage sur incident lorsqu'un incident se produit et que le vidage me permet ensuite de charger les symboles de débogage sur mon ordinateur dev et de savoir ce qui se passe. Plus d'informations ici: http://www.debuginfo.com/articles/effminidumps.html

Vous pouvez également aller à file = > Ouvrez dans Visual Studio et ouvrez le fichier .exe afin de ne pas le démarrer sous le débogueur en tant que tel. Je ne sais pas si cela aidera.

http://blogs.msdn.com/saraford/archive/2008 / 08/21 / saviez-vous-que-vous-pouvez-déboguer-un-exécutable-qui-n'est-pas-une-partie-d'un-projet-studio-visuel-sans-utilisation-d'outils-attaches-au-processus -296.aspx

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