Jak przerwać instrukcję asemblera pod podanym adresem w gdb?

99
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   

Próbowałem:

breaki 0x0000000000400448

ale wydaje się, że nie ma takiego polecenia.

Czy gdb ma taką funkcję?

kompilacja-fan
źródło
3
dlaczego breaki? czy to literówka?
phil294
2
@Blauhirn Być może jako domniemana analogia do stepii nexti, które są używane do wykonywania pojedynczych kroków na poziomie instrukcji.
Per Lundberg

Odpowiedzi:

152

próbować break *0x0000000000400448

Laurent G.
źródło
15
Probably because * is required to specify an address. see sourceware.org/gdb/current/onlinedocs/gdb/…
Laurent G
4
I oczywiście możesz usunąć wiodące zera i skrócić break, dać b *0x400448.
user202729
Aby ujednoznacznić funkcję lub dane o nazwie 0x0000000000400448(choćby nietypowe!)
Dan Anderson,
1
@ compile-fan break * address Ustaw punkt przerwania pod adresem adres. Możesz użyć tego do ustawienia punktów przerwania w częściach programu, które nie mają informacji debugowania ani plików źródłowych. ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html Debugowałem kod asemblera i dotarłem tutaj z tym samym pytaniem, które zadałeś.
P4cK3tHuNt3R
64

Inny sposób:

break *main+4

This will add a breakpoint at 0x000000000040044c
I think this is easier than writing the whole address!

jyz
źródło