[英]gdb breakpoint in shared library not working
因此,我有以下c程序:
#include <stdio.h>
#include <string.h>
int main(){
char arr[20];
//this is line 6
strcpy(arr,"Hello, world!\n");
printf(arr);
}
我使用以下命令對其進行了編譯:
gcc -g t2.c -o a2.out
之后,我將其加載到gdb中,並嘗試在第6行,strcpy函數和第8行設置斷點。果然,在strcpy處設置斷點時,我收到以下消息:“使斷點在將來共享庫加載時掛起嗎?( y或[n])”。 我回答“ y”,並得到“斷點2(strcpy)”待處理。
在回答“是”並運行程序之后,絕不會解決斷點2的問題,調試器會在printf處直接跳至斷點3。
我在調試器中使用Intel語法。 除此之外,沒有自定義設置。 誰能說說為什么strcpy的斷點從未解決過?
諸如gcc之類的編譯器對諸如strcpy
之類的字符串函數的語義非常熟悉。 在您的示例的x86-64上,即使在-O0
處,gcc 9也會生成內聯匯編而不是strcpy
調用。 斷點應適用於大多數其他功能。
用gcc-9生成的x86-64反匯編(無strcpy調用):
0000000000000000 <main>:
0: 48 83 ec 28 sub rsp,0x28
4: 48 b8 48 65 6c 6c 6f 2c 20 77 movabs rax,0x77202c6f6c6c6548
e: bf 01 00 00 00 mov edi,0x1
13: 48 89 04 24 mov QWORD PTR [rsp],rax
17: b8 21 0a 00 00 mov eax,0xa21
1c: 48 89 e6 mov rsi,rsp
1f: 66 89 44 24 0c mov WORD PTR [rsp+0xc],ax
24: 31 c0 xor eax,eax
26: c7 44 24 08 6f 72 6c 64 mov DWORD PTR [rsp+0x8],0x646c726f
2e: c6 44 24 0e 00 mov BYTE PTR [rsp+0xe],0x0
33: e8 00 00 00 00 call 38 <main+0x38> 34: R_X86_64_PLT32 __printf_chk-0x4
38: 31 c0 xor eax,eax
3a: 48 83 c4 28 add rsp,0x28
3e: c3 ret
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.