2010-11-12 11 views
11

Quiero establecer una condición en un punto de interrupción gdb para que solo se rompa si aparece un nombre de función determinado en la traza inversa. ¿Cuál es la mejor manera de hacer esto?GDB Descanso si el marco está en traza inversa

+0

duplicado posible de [? ¿Hay alguna manera de establecer un punto de interrupción en el BGF que está condicionada a la pila de llamadas] (http://stackoverflow.com/questions/5336403/is-there-any-way-to-set-a-breakpoint-in-gdb-that-is-conditional-on-the-call-stac) –

Respuesta

2

No estoy seguro de cómo hacer exactamente lo que pide, pero una solución posible, si tiene acceso al código fuente de la función relevante, es establecer alguna variable booleana global en true al comienzo de la función y configúrelo en false justo antes de que la función finalice. Entonces puede establecer un punto de interrupción condicional (utilizando el comando condition) para detener solo cuando esta variable booleana es true.

+0

Eso es lo que terminé haciendo pero me gustaría saber cómo para hacerlo sin recompilar – Chazz

3

Una solución más simple que la creación de scripts de Python es usar temporary breakpoint.

Parece que este:

b ParentFunction 
command 1 
    tb FunctionImInterestedIn 
    c 
end 

Cada vez que se rompe en ParentFunction, deberá definir un punto de interrupción de una sola vez de la función que está realmente interesado en, a continuación, seguir ejecutando (presumiblemente hasta llegar ese punto de interrupción).

Puesto que usted va a romper exactamente una vez en FunctionImInterestedIn, esto no funcionará si FunctionImInterestedIn se llama varias veces en el contexto de ParentFunction y que desea romper en cada invocación.

0

alternativa a la respuesta de rix0rrr:

b main 
commands 
set $inParentFunction = 0 
c 
end 

b ParentFunction 
commands 
set $inParentFunction = 1 
c 
end 

b FunctionImInterestedIn if ($inParentFunction) 
Cuestiones relacionadas