设为首页 加入收藏

TOP

GDB如何调试没有符号表(未加-g选项的编译)的程序
2015-02-13 18:23:20 来源: 作者: 【 】 浏览:33
Tags:GDB 如何 调试 没有 符号 未加 选项 编译 程序

/*********************************************************************
?* Author? : Samson
?* Date? ? : 01/30/2015
?* Test platform:
?*? ? ? ? ? ? ? 3.13.0-24-generic
?*? ? ? ? ? ? ? GNU bash, 4.3.11(1)-release
?* *******************************************************************/
很多时候,发行版的程序在编译的时候都是没有加上-g这个选项的,那么若是想调试一个程序,应该怎么办呢?


在加了-g选项时,是可以通过行号、函数名等进行断点的设置的,但是没有符号表的情况下,那么怎么来进行程序的断点的设置并进行调试呢?


这就要用到反汇编然后再对地址进行断点的设置来进行调试,具体情况可参看以下例子的过程:


test.c代码如下:


#include
#include


int main()
{
? ? int m = 0, n =9;
? ? int k = m+n;
? ? printf("k is %d\n", k);
? ? m = k + n;
? ? printf("m is %d\n", m);
? ? n = m-n;
? ? printf("n is %d\n", n);
? ? return 0;
}
使用不带-g参数的编译命令行进行编译:


linuxidc@linuxidc:~$ gcc test.c
使用gdb进行程序的调试:


Breakpoint 1, 0x08048452 in main ()
(gdb) c
Continuing.
k is 9


Breakpoint 2, 0x08048474 in main ()
(gdb) c
Continuing.
m is 18


Breakpoint 3, 0x0804849a in main ()
(gdb) c
Continuing.
n is 9
[Inferior 1 (process 19933) exited normally]


由以上的步骤可以看出,使用了disassemble main 进行主函数的反汇编,然后使用了b *address进行三处printf的地址的断点的设置。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一个简单的C共享库的创建及Python.. 下一篇IntelliJ IDEA读取资源文件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: