2016-07-04 25 views
2

Wenn ich einen Core Dump (nach segfault) haben und den Rahmen I in wie folgt aussieht interessiert bin:Ist es möglich, unbenannte Rahmen-/Funktionsargumente mit GDB anzuzeigen?

#2 0x000000000043cbfa in foo::Bar::baz(float)() 

Wie extrahieren ich das Argument Wert im gegebenen Rahmen mit GDB?

+0

Sie manuell Stapelrahmen (info Rahmen, Info reg, x/ x $ sp ...) untersuchen versuchen. Es scheint, dass Debug-Informationen für diese Funktion fehlen, daher müssen Sie den Code möglicherweise zerlegen und versuchen zu verstehen, was passiert. – dbrank0

+0

Der Name der Funktion hat genug Informationen für mich. Ich möchte nur den Argumentwert wissen. Die Frage ist im Grunde, ob ich das Valueye bekommen kann, ohne den Code wirklich zu zerlegen. Ich habe Grundkenntnisse in gdb und schnelles googeln gab mir keine Ergebnisse. –

+1

Nicht ohne auch zu wissen, wo dieses Argument zum Zeitpunkt des Absturzes gespeichert ist - z.B. Es kann in einem Register auf dem Stapel sein, abhängig von der Aufrufkonvention und dem aktuellen Status in der Funktion. Niemand weiß, ohne zumindest zu wissen, welcher Prozessor und welches Betriebssystem (und möglicherweise davon, welcher Compiler und welche Optimierungsstufe verwendet wird) –

Antwort

0

Speicher gehen aus. Befehlssequenz das Argument in einem Rahmen zur Liste ist

frame 2 
info args 
+0

Das endet mit * "Keine Symboltabelle info available. "* –

+0

Haben Sie Debug-Symbole für diesen Code? Kannst du eine solche Version bekommen? Wenn Sie können, können Sie den Befehl "symbol-file" verwenden, um Symbole zu laden, und wenn die Funktion nicht stark optimiert wurde, sollte es funktionieren. – dbrank0

+0

Ich denke, das ist der Kern der Frage: * Wie bekomme ich den Wert, ohne dass ihm ein Symbol zugewiesen wurde? * –