2010-11-12 10 views
11

Desidero impostare una condizione su un breakpoint gdb per interrompere solo se un determinato nome di funzione viene visualizzato nel backtrace. Qual'è il miglior modo per farlo?Interruzione GDB se il frame è in backtrace

+0

Eventuali duplicati di [? C'è un modo per impostare un punto di interruzione in gdb, che è subordinato al stack di chiamate] (http://stackoverflow.com/questions/5336403/is-there-any-way-to-set-a-breakpoint-in-gdb-that-is-condizioned-on-the-call-stac) –

risposta

2

Non sono sicuro di come fare esattamente ciò che si richiede, ma una possibile soluzione alternativa, se si ha accesso al codice sorgente della funzione rilevante, è impostare una variabile booleana globale su true all'inizio della funzione e impostarlo su false appena prima che la funzione esca. Quindi è possibile impostare un punto di interruzione condizionale (utilizzando il comando condition) per interrompere solo quando questa variabile booleana è true.

+0

Questo è quello che ho finito, ma mi piacerebbe sapere come per farlo senza ricompilare. – Chazz

3

Una soluzione più semplice rispetto allo scripting Python utilizza uno temporary breakpoint.

Ecco come si presenta:

b ParentFunction 
command 1 
    tb FunctionImInterestedIn 
    c 
end 

Ogni volta che si rompe in ParentFunction, potrai impostare un punto di interruzione di una volta sulla funzione si sta effettivamente interessati, poi continuate in esecuzione (presumibilmente fino a colpire quel punto di rottura).

Dal momento che ti rompere esattamente una volta su FunctionImInterestedIn, questo non funzionerà se FunctionImInterestedIn viene chiamato più volte nel contesto di ParentFunction e si vuole rompere ad ogni invocazione.

0

alternativa alla risposta di rix0rrr:

b main 
commands 
set $inParentFunction = 0 
c 
end 

b ParentFunction 
commands 
set $inParentFunction = 1 
c 
end 

b FunctionImInterestedIn if ($inParentFunction) 
Problemi correlati