[英]GDB skips shared library breakpoint
我使用帶有簡單C程序的調試器,試圖通過共享庫設置斷點,但是GDB完全跳過了該斷點。
我試圖通過簡單的C程序使用GDB來了解GDB。 我設置了3個斷點,第7行設置了1個斷點,在strcpy函數上設置了1個斷點,在第8行中設置了一個斷點。我嘗試在程序中設置一個涉及共享庫的斷點(特別是“ break strcpy”),但是每次運行該程序時然后按“ c”,程序將完全跳過斷點2
#include <stdio.h>
#include <string.h>
int main() {
char str_a[20];
strcpy(str_a, "Hello, world!\n");
printf(str_a);
}
每當我在調試器中運行程序時,它通常會在預期的斷點1處停止,但是隨后每當我按“ c”鍵繼續至斷點2時,它就會完全跳過斷點2並僅顯示輸出斷點3應該具有。 這與GDB對共享庫的處理有關嗎?
編輯:這是反匯編
0x0000555555555145 <+0>: push rbp
0x0000555555555146 <+1>: mov rbp,rsp
0x0000555555555149 <+4>: sub rsp,0x20
0x000055555555514d <+8>: lea rax,[rbp-0x20]
0x0000555555555151 <+12>: lea rsi,[rip+0xeac] # 0x555555556004
0x0000555555555158 <+19>: mov rdi,rax
0x000055555555515b <+22>: call 0x555555555030 <strcpy@plt>
0x0000555555555160 <+27>: lea rax,[rbp-0x20]
0x0000555555555164 <+31>: mov rdi,rax
0x0000555555555167 <+34>: mov eax,0x0
0x000055555555516c <+39>: call 0x555555555040 <printf@plt>
0x0000555555555171 <+44>: mov eax,0x0
0x0000555555555176 <+49>: leave
0x0000555555555177 <+50>: ret
您未指定平台。 我懷疑這是帶有GLIBC的Linux。
GDB以這種方式運行的原因是strcpy
不是普通函數,而是GNU IFUNC
。
嘗試在__strcpy_sse2_unaligned
上設置斷點,然后查看此答案。
更新:
只要調試器到達斷點2,調試器就會吐出該錯誤,
"../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: No such file or directory.
__strcpy_sse2_unaligned
視為strcpy
的別名。 在系統上設置斷點等同於在strcpy
上設置斷點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.