2013-10-11 3 views
0

J'ai un projet C++ où le beahviour en mode debug et release diffère. Par exemple. en mode release, j'obtiens de mauvaises erreurs d'allocation où en mode débogage, everthing fonctionne bien. Peut-être que cette différence vient de la vitesse d'exécution différente.Débogage sans débogage des symboles

Avez-vous des conseils et astuces pour déboguer un programme sans débogueur standard (comme gdb)? Je pourrais essayer d'utiliser beaucoup dans les domaines critiques, mais cela ne semble pas être le meilleur moyen d'y parvenir ... Peut-être qu'il existe un moyen d'obtenir des informations sur les emplacements de certains types d'erreurs sans utiliser de symboles de débogage? Y a-t-il des outils?

+0

Êtes-vous sûr que la différence est traitée par le symbole de débogage? quelles sont les commandes de compilation pour générer des binaires de débogage/libération? – tristan

+2

Vous pouvez avoir des symboles de débogage disponibles dans une version release et cela ne devrait pas du tout changer le comportement du programme. Si vous rencontrez des problèmes entre les versions de débogage/édition, il est probable que vous ayez un comportement non défini ou des variables non initialisées qui causent des problèmes. –

+0

Une erreur d'allocation incorrecte est-elle une exception? Pouvez-vous attraper et enregistrer l'exception avec une pile de pile? Combien de mémoire chaque version utilise-t-elle réellement? – doctorlove

Répondre

0

Si vous pouvez obtenir une trace de pile de l'incident, vous pourrez peut-être le symboliser plus tard. Par exemple, sur MacOS, il y a l'outil atos qui, selon la page man:

convertit les adresses numériques à leurs équivalents symboliques.

Cela vous permettra d'exécuter sans symboles, mais les utiliser plus tard.

+0

Pour la chaîne d'outils GNU, l'équivalent serait 'addr2line '. Ceci, cependant, seulement partiellement lié à la question. – keltar

Questions connexes