2016-11-14 1 views
0

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

enter image description here

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

enter image description here

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?

+0

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

+0

@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? –

+0

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

Répondre

0

Je suspecterais le déréférencement d'un objet déjà libéré. Cela peut être votre objet de classe ou un objet dans une méthode problématique. Est-ce que vous définissez chaque pointeur sur NULL après avoir utilisé delete/free?

// Edit: Ce était censé être un commentaire au lieu de réponse, mais je clique sur le bouton incorrect (application téléphone)

+0

J'aurais également suspecté de déréférencer un objet invalide, mais je le débogueur montre la mémoire référencée comme valide, et j'aurais pensé que cela serait listé comme une faute de page ou une exception similaire dans le résumé. –

+0

Avez-vous vérifié les paramètres aussi? – woockashek