Un fichier core a été produit par une version Release du code (g ++) dont les symboles ont été supprimés.Est-il possible de déboguer un fichier core produit à l'origine par un exécutable dont les symboles ont été supprimés?
En prenant cette même version (SVN) du code, j'ai modifié les options de construction pour inclure des symboles.
Dois-je être en mesure de déboguer ce fichier core en utilisant l'exécutable que j'ai construit qui comprend des symboles? Cela ne semble pas possible, mais je veux juste m'assurer que ce n'est pas quelque chose d'autre que je fais de mal.
bash-3.2$ gdb ./MyTest.53519 -c ~/public_html/core.20375.MyTest
GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-42.el5)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/me/tmp/MyTest.53519...done.
warning: core file may not match specified executable file.
[New Thread 20388]
[New Thread 20389]
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Core was generated by `./MyTest -np1 -p1'.
Program terminated with signal 11, Segmentation fault.
#0 0x00007f99c19b39e0 in ??()
(gdb) bt
#0 0x00007f99c19b39e0 in ??()
#1 0x00007f99bc438650 in ??()
#2 0x00007f99c19b58cf in ??()
#3 0x00007f9994008880 in ??()
#4 0x00007f99b8013080 in ??()
#5 0x00007f99bc4386f0 in ??()
#6 0x00007f99bc438b00 in ??()
#7 0x00007f99bc438810 in ??()
#8 0x00007f99c19aa489 in ??()
À mon humble avis, je crois que c'est * possible *. Peut-être très difficile, mais possible. Par exemple, le débogage peut être plus rapide en créant un exécutable avec des symboles de débogage et en utilisant cet exécutable plutôt qu'en déboguant un exécutable sans symboles. J'espère que vous êtes vraiment bon pour lire le code d'assemblage (forme lisible par l'homme) ou le code machine (les numéros d'instructions). –
Avez-vous un fichier * map * qui affiche les symboles et les adresses? Vous pouvez rechercher l'adresse dans le fichier carte pour trouver le symbole ou la déclaration la plus proche. –
Tout au-delà des normes C++! Soyez spécifique à votre environnement actuel! –