จะทำลายคำแนะนำในการประกอบตามที่อยู่ที่ระบุใน 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   

ฉันเหนื่อย:

breaki 0x0000000000400448

แต่ดูเหมือนว่าจะไม่มีคำสั่งดังกล่าว

gdb มีคุณสมบัติดังกล่าวหรือไม่?


3
เพราะbreakiอะไร? พิมพ์ผิดหรือเปล่า
phil294

2
@Blauhirn บางทีอาจเป็นการเปรียบเทียบกับstepiและnextiซึ่งใช้สำหรับขั้นตอนเดียวในระดับการเรียนการสอน
Per Lundberg

คำตอบ:


147

ลอง break *0x0000000000400448


15
อาจเป็นเพราะ * จำเป็นต้องระบุที่อยู่ ดูsourceware.org/gdb/current/onlinedocs/gdb/…
Laurent G

4
และแน่นอนว่าคุณสามารถลบเลขศูนย์นำหน้าและย่อbreakให้b *0x400448ได้
user202729

เพื่อทำให้สับสนกับฟังก์ชันหรือข้อมูลที่มีชื่อว่า0x0000000000400448(ผิดปกติอย่างนั้น!)
Dan Anderson

1
ที่อยู่ @ compile-fan break * ตั้งค่าจุดพักตามที่อยู่ คุณสามารถใช้สิ่งนี้เพื่อตั้งค่าเบรกพอยต์ในส่วนต่างๆของโปรแกรมที่ไม่มีข้อมูลการดีบักหรือไฟล์ต้นฉบับ ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.htmlฉันกำลังแก้จุดบกพร่องรหัสแอสเซมบลีและมาที่นี่สำหรับคำถามเดียวกันกับที่คุณถาม
P4cK3tHuNt3R

63

อีกวิธีหนึ่ง:

break *main+4

นี่จะเป็นการเพิ่มจุดพักที่0x000000000040044c
ฉันคิดว่ามันง่ายกว่าการเขียนที่อยู่ทั้งหมด!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.