现在的位置: 首页 > 综合 > 正文

eclipse的C程序调试技巧

2013年10月21日 ⁄ 综合 ⁄ 共 1331字 ⁄ 字号 评论关闭

1.条件断点

    在某一语句添加断点后,点右键->BreakPoint Properties, 例如 int i=  b;  断点条件可设为 b != 0.

2. 热替换

   单步调试中可在Variablies栏中修改变量的值,进行调试.

3.分析core文件查看出错到行数和文件

    core文件到说明可以man core 查看。打开core文件到产生开关为ulimit -c unlimited 。core文件查看方法为gdb ./应用程序名  core.xxx

4.程序内存映射文件/proc/xxx/maps的分析

... ...

0073c000-00740000 rw-p 0008e000 08:01 208253     /usr/local/lib/libdirectfb-1.4.so.5.0.6
00ded000-00e03000 r-xp 00000000 08:01 208133     /usr/local/lib/libdirect-1.4.so.5.0.6
00e03000-00e04000 rw-p 00016000 08:01 208133     /usr/local/lib/libdirect-1.4.so.5.0.6
08048000-0804f000 r-xp 00000000 08:11 538998     /home/justin/workspace/directfb_test/Debug/directfb_test
0804f000-08050000 rw-p 00006000 08:11 538998     /home/justin/workspace/directfb_test/Debug/directfb_test
08050000-08054000 rw-p 00000000 00:00 0
b770c000-b770e000 rw-p 00000000 00:00 0
b772f000-b7732000 rw-p 00000000 00:00 0
bf9fb000-bfa10000 rw-p 00000000 00:00 0          [stack]

文件有6列,每项都与一个vm_area_struct结构成员对应,依次为

地址:库在进程到地址范围

权限:虚拟内存的权限, r=读,w=写,x=可执行,s=共享,p=私有

偏移动量:库在被映文件(库文件或者程序)中的偏移量

设备:映文件到主设备号和次设备号

节点号:映文件的节点号

路径:映像文件的路径

共享库的代码段,存放的是二进制可执行代码, kernel将库elf文件的代码段映射到虚拟内存空间

共享库的数据段,存放的是程序执行所需的全局变量, kernel将库elf文件的数据段映射到虚拟内存空间

用户程序的代码段,存放到二进制可执行代码,kernel将程序文件的代码段映射到虚拟内存空间

用户程序的数据段,如上,用户程序的数据段分为两个部分一部分是已初始化的全局变量,一部分是未初始化的全局变量

堆(heap)位于用户数据段之下,当且仅当调用malloc时存在, 否则这部分算是stack,kernel将匿名内存映射到虚拟内存空间

栈(stack)位于堆下面,进程的临时数据区,kernel将匿名内存映射到虚拟内存空间


5. objdump反汇编

    可以定位到某个函数,具体用法man。
















抱歉!评论已关闭.