首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >断点使用GDB

断点使用GDB
EN

Stack Overflow用户
提问于 2015-04-03 16:24:04
回答 1查看 360关注 0票数 1

我使用GDB来调试我的代码,当在函数上设置断点时(例如:使用strcpy from string.h.h)。

1)在此代码中,gdb停止在strcpy函数的断点处。

代码语言:javascript
复制
 (gdb) list
1   #include<stdio.h>
2   #include<string.h>
3   main()
4   {
5   char a[20],b[]="ffff";
6   strcpy(a,b);
7   printf("%s\n",a);
8   }
(gdb) break 6
Breakpoint 1 at 0x8048486: file thu.c, line 6.
(gdb) break strcpy
Breakpoint 2 at 0x8048370
(gdb) break 7
Breakpoint 3 at 0x804849a: file thu.c, line 7.
(gdb) run
Starting program: /home/m/a.out 

Breakpoint 1, main () at thu.c:6
6   strcpy(a,b);
(gdb) c
Continuing.

Breakpoint 2, 0xb7ea2490 in ?? () from /lib/i386-linux-gnu/libc.so.6
(gdb) c
Continuing.

Breakpoint 3, main () at thu.c:7
7   printf("%s\n",a);

您可以看到gdb停在breakpoint2 (在strcpy内)。

2)在此代码中,GDB不是停留在断点2(在strcpy内),而是转到breakpoint3。

代码语言:javascript
复制
(gdb) list
1   #include<stdio.h>
2   #include<string.h>
3   main()
4   {
5   char a[20];
6   strcpy(a,"hello world!");
7   printf("%s\n",a);
8   }
(gdb) break 6
Breakpoint 1 at 0x8048449: file thu.c, line 6.
(gdb) break strcpy
Function "strcpy" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y

Breakpoint 2 (strcpy) pending.
(gdb) break 7
Breakpoint 3 at 0x8048469: file thu.c, line 7.
(gdb) run
Starting program: /home/m/a.out 

Breakpoint 1, main () at thu.c:6
6   strcpy(a,"hello world!");
(gdb) c
Continuing.

Breakpoint 3, main () at thu.c:7
7   printf("%s\n",a);

那么,是什么使两种情况不同呢?我正在学习“黑客:剥削的艺术”一书乔恩·埃里克森( Jon ),这是本书的一个例子,案例2与第39页的代码char_array2.c相似,但在断点2的情况下,输出与书中的输出不同。

谢谢你的阅读!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-03 17:00:04

在第一种情况下,编译器拥有所有细节(所有参数都是堆栈上已知偏移量处的变量。所以编译器可能用宏替换了对strcpy的调用。在第二种情况下,并不是所有有关参数的细节都已知,因此编译器插入了对strcpy的实际调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29435932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档