¿Cómo interrumpir las instrucciones de montaje en una dirección determinada en gdb?


97
0x0000000000400448 <main+0>:    push   %rbp
0x0000000000400449 <main+1>:    mov    %rsp,%rbp
0x000000000040044c <main+4>:    mov    $0x6,%eax
0x0000000000400451 <main+9>:    leaveq 
0x0000000000400452 <main+10>:   retq   

Lo intenté:

breaki 0x0000000000400448

pero parece que no existe tal mando.

¿Tiene gdb tal característica?


3
¿Por qué breaki? ¿Eso es un error tipográfico?
phil294

2
@Blauhirn Quizás como una supuesta analogía con stepiy nexti, que se utilizan para pasos simples a nivel de instrucción.
Per Lundberg

Respuestas:


147

tratar break *0x0000000000400448


15
Probablemente porque se requiere * para especificar una dirección. ver sourceware.org/gdb/current/onlinedocs/gdb/…
Laurent G

4
Y, por supuesto, puede eliminar los ceros iniciales y abreviar break, dar b *0x400448.
user202729

Para eliminar la ambigüedad con la función o los datos nombrados 0x0000000000400448(¡por inusual que sea!)
Dan Anderson

1
@ compile-fan break * address Establece un punto de interrupción en la dirección de la dirección. Puede usar esto para establecer puntos de interrupción en partes de su programa que no tienen información de depuración o archivos fuente. ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html Estaba depurando un código ensamblador y llegué aquí para la misma pregunta que hiciste.
P4cK3tHuNt3R

63

De otra manera:

break *main+4

Esto agregará un punto de interrupción en 0x000000000040044c
¡Creo que es más fácil que escribir la dirección completa!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.