我正在玩调试器。我正在处理的实际任务是观察指令指针在运行代码时如何改变。为什么我的断点不按顺序运行? GCC和C
但是,我很难理解别的东西。我在第6行设置了断点,strcpy(位于第7行)和第8行。设置断点后,我运行它。
为什么它以不同的顺序通过断点?断点2,断点1和断点3?
其他问题,我有......断点1设置为6行然而,当我们到达该断点它说:“char_array2.c:7”。我知道第6行是空的,在读取第7行的任何部分之前断点是否停止?
(gdb) list
1 #include <stdio.h>
2 #include <string.h>
3
4 int main() {
5 char str_a[20];
6
7 strcpy(str_a, "Hello World!\n");
8 printf(str_a);
9 }
(gdb)
Line number 10 out of range; char_array2.c has 9 lines.
(gdb) break 6
Breakpoint 1 at 0x100000ec8: file char_array2.c, line 6.
(gdb) break strcpy
Breakpoint 2 at 0x20c49ba5c77e20
(gdb) break 8
Breakpoint 3 at 0x100000edd: file char_array2.c, line 8.
(gdb) run
Starting program: /Users/Guest1/Desktop/Hacking files/char_array2
Reading symbols for shared libraries +. done
Breakpoint 2, 0x00007fff8601ce20 in strcpy()
(gdb) continue
Continuing.
Breakpoint 1, main() at char_array2.c:7
7 strcpy(str_a, "Hello World!\n");
(gdb) continue
Continuing.
Breakpoint 3, main() at char_array2.c:8
8 printf(str_a);
反汇编'main' - 什么是'0x100000ec8'?断点*真的*只发生在指令上,而不是代码行,即使gdb给你方便的设置它们。你是否编译过一些优化? –
谢谢,是的,我用“gcc -g -o char_array2 char_array2.c” – jimbo123