El n El nombre que describe aparece con bastante frecuencia, generalmente en el contexto de some_utility_fn
que se llama mucho, pero solo le interesa la llamada que proviene del some_other_fn
.
Es probable que pueda crear una secuencia de comandos de toda esta interacción utilizando la nueva compatibilidad incorporada de Python en GDB desde la troncal de CVS.
Sin Python, que están limitados en lo que puede hacer, pero la técnica habitual es tener un punto de interrupción discapacitados en a()
y activar desde un comando, unido a un punto de interrupción en b()
.
Aquí se muestra un ejemplo:
int a(int x)
{
return x + 1;
}
int b()
{
return a(1);
}
int call_a_lots()
{
int i, sum = 0;
for (i = 0; i < 100; i++)
sum += a(i);
}
int main()
{
call_a_lots();
return b();
}
gcc -g t.c
gdb -q ./a.out
Reading symbols from /tmp/a.out...done.
(gdb) break a
Breakpoint 1 at 0x4004cb: file t.c, line 3.
(gdb) disable 1
(gdb) break b
Breakpoint 2 at 0x4004d7: file t.c, line 8.
(gdb) command 2
>silent
>enable 1
>continue
>end
(gdb) run
Breakpoint 1, a (x=1) at t.c:3
3 return x + 1;
(gdb) bt
#0 a (x=1) at t.c:3
#1 0x00000000004004e1 in b() at t.c:8
#2 0x000000000040052c in main() at t.c:21
(gdb) q
Voila: hemos dejado en a()
llamado desde b()
, haciendo caso omiso de 100 llamadas anteriores a a()
.
¿Qué hace el 'comando 2'? –
@NathanFellman 'command 2' adjunta comandos al breakpoint 2 –
¿Se puede automatizar sin Python? http://stackoverflow.com/questions/41397560/how-to-pass-cli-arguments-to-a-commands-inside-a-define-in-gdb –