J'ai un fichier de vidage collecté par un utilisateur rencontrant un problème lors de l'exécution de mon application C++, et j'essaie de déterminer si l'application a planté. D'après ce que je peux voir dans le fichier de vidage, il n'y a pas d'exception ou d'erreur indiquant un plantage, ni de threads en interblocage en concurrence pour un mutex ou un autre objet de synchronisation.Comment savoir si un fichier de vidage représente un plantage
L'emplacement du programme pour le thread principal auquel la décharge a été créé est un appel à une fonction virtuelle, mais le vtable de l'objet est correct et les points à la bonne fonction, par exemple le code est
FindIt = m_EntityList[m_ListPos]->GetChainageOffset(X,Y,Chainage,Offset);
et en regardant les variables que je vois
Ai-je raison de penser que cela ne semble pas être un déréférencement de défaut de page/illégale ou suis-je manque quelque chose ici? J'ai vérifié tous les autres threads dans mon pool de threads et ils sont inactifs. Un fichier de vidage aurait-il toujours un code d'exception et des informations d'erreur dans le cas d'un plantage?
Est-ce que vous essayez d'utiliser Windbg pour faire une analyse sur le fichier de vidage? Il vous dira si l'exe s'est écrasé – Matt
@Matt, j'ai utilisé VS2015 pour déboguer le fichier de vidage qui était le compilateur utilisé pour le développement. Windbg a de la difficulté à charger tous les symboles. Est-ce qu'il offre des avantages sur le débogueur VS2015, car cela me donne des emplacements de programme pour chaque thread? –
Dans les cas courants, VS fera l'affaire. Windbg peut certainement obtenir plus d'informations de la décharge, plus d'informations ici: http: //stackoverflow.com/questions/105130/why-use-windbg-vs-the-visual-studio-vs-debugger – Matt