2010-11-12 10 views
11

Ich möchte eine Bedingung auf einem Gdb-Haltepunkt nur brechen, wenn ein bestimmter Funktionsname in der Backtrace erscheint. Was ist der beste Weg, dies zu tun?GDB Pause, wenn Frame in Backtrace ist

+0

Mögliches Duplikat [? Gibt es eine Möglichkeit, einen Haltepunkt in gdb zu setzen, die auf dem Call-Stack bedingt ist] (http://stackoverflow.com/questions/5336403/is-there-any-way-to-set-a-breakpoint-in-gdb-das-ist-konditional-on-the-call-stac) –

Antwort

2

Ich bin nicht sicher, wie Sie genau das tun, was Sie verlangen, aber eine mögliche Abhilfe, wenn Sie Zugriff auf den Quellcode der relevanten Funktion haben, ist eine globale boolesche Variable auf true am Anfang der Funktion zu setzen und setzen Sie ihn auf false, kurz bevor die Funktion beendet wird. Dann können Sie einen bedingten Haltepunkt setzen (mit dem Befehl condition), um nur zu stoppen, wenn diese boolesche Variable true ist.

+0

Das ist, was ich am Ende getan habe, aber ich würde gerne wissen, wie um es ohne Neukompilierung zu tun. – Chazz

3

Eine einfachere Lösung als Python-Scripting verwendet eine temporary breakpoint.

Es sieht wie folgt aus:

b ParentFunction 
command 1 
    tb FunctionImInterestedIn 
    c 
end 

Jedes Mal, wenn Sie in ParentFunction brechen, werden stellen Sie eine einmalige Haltepunkt auf die Funktion, die Sie tatsächlich interessiert sind, dann weiter läuft (vermutlich bis Sie treffen dieser Haltepunkt).

Da Sie genau einmal brechen werde auf FunctionImInterestedIn, das wird nicht funktionieren, wenn FunctionImInterestedIn mehrfach im Zusammenhang mit ParentFunction genannt wird und Sie bei jedem Aufruf brechen wollen.

0

Alternative zu rix0rrr Antwort:

b main 
commands 
set $inParentFunction = 0 
c 
end 

b ParentFunction 
commands 
set $inParentFunction = 1 
c 
end 

b FunctionImInterestedIn if ($inParentFunction)