Ich mein echtes GDB-Skript beim Analysieren einer Kerndatei Ich versuche, einen Zeiger zu dereferenzieren und bekomme "Fehler in der Quellbefehlsdatei: Speicher kann nicht auf Adresse zugreifen" und dann stoppt mein GDB-Skript. Was ich will ist, einfach mein gdb-Skript auszuführen, ohne anzuhalten. Ist es möglich?gdb stoppt in einer Befehlsdatei, wenn ein Fehler auftritt. Wie geht es trotz des Fehlers weiter?
Dies ist ein Testprogramm und ein Test-GDB-Skript, das mein Problem zeigt. In dieser Situation hat der Zeiger einen NULL-Wert, aber in einer realen Situation wird der Zeiger keinen ungültigen ungültigen Wert haben.
Dies ist Test C-Programm:
#include <stdio.h>
struct my_struct {
int v1;
int v2;
};
int main()
{
my_struct *p;
printf("%d %d\n", p->v1, p->v2);
return 0;
}
Dies ist ein Test gdb Skript:
>cat analyze.gdb
p p->v1
q
Und dies ist Demonstration des Problems (was ich von GDB will hier ist, diesen Fehler zu bekommen Nachricht und dann gehen Prozess quit
Befehl):
>gdb -silent a.out ./core.22384 -x ./analyze.gdb
Reading symbols from /a.out...done.
[New Thread 22384]
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x0000000000400598 in main() at main.cpp:11
11 printf("%d %d\n", p->v1, p->v2);
./analyze.gdb:1: Error in sourced command file:
Cannot access memory at address 0x0
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.80.el6.x86_64
Aktualisieren
Danke an Tom. Dies ist ein gdb-Skript, das dieses Problem behandelt:
Dies ist, wie es funktioniert:
>gdb -silent ./a.out -x ./analyze.v2.gdb -c ./core.15045
Reading symbols from /import/home/a.out...done.
[New Thread 15045]
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x0000000000400598 in main() at main.cpp:11
11 printf("%d %d\n", p->v1, p->v2);
$1 = "Executing command: p p"
$2 = (my_struct *) 0x0
$3 = "Executing command: p p->v1"
$4 = "ERROR: p p->v1"
$5 = "Executing command: quit"
Vielen Dank für Ihren Rat.Ich habe es nicht geschafft, 'ignore-errors' zu verwenden, da ich' Undefined command: 'ignore-errors' 'bekomme, aber ich habe einen ähnlichen Befehl erstellt und ich habe gearbeitet. –
Ja, du musstest danach suchen. http://sourceware.org/ml/gdb/2010-06/msg00100.html –
Lassen Sie mich erklären. In gdb auf meinem Server gibt es ignore-errors.py, aber ich weiß noch nicht, wie man es benutzt. Die Eingabe von 'ignore-errors print p' funktioniert nicht. Trotzdem habe ich die Idee in der ignore-errors.py benutzt und meine eigenen 'my_ignore_errors' erstellt. Sie können es in meiner aktualisierten Frage sehen. –