Я использую отладчик с простой программой на C, я пытаюсь установить точку останова с помощью общей библиотеки, но GDB полностью пропускает эту точку останова.
Я пытаюсь использовать GDB с простой программой на C, чтобы узнать оGDB.Я установил 3 точки останова, 1 в строке 7, одну в функции strcpy и одну в строке 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