gdb调试学习 (一)

本文由 @lonelyrains 出品,转载请注明出处。 
文章链接: http://blog.csdn.net/lonelyrains/article/details/7755432


       这一部分由阅读 《 The Art of Debugging withGDB,DDD,and Eclipse》整理,以知识点形式一条条列举。本书讲解很详尽,是一本不错的调试入门书籍。不过作为“the art”开头的书,感觉内容分量不够。

-------------调试基础------------------

1、GDB:GNU Project Debugger,针对基于linux平台项目的调试器;DDD:Data Display Debbuger,数据显示调试器,是GDB的一种GUI,内部以命令行方式与GDB交互,也提供直接的GDB命令行输入窗口

2、根据二分搜索方式,分段注释源代码,定位bug

3、GDB是针对机器语言指令的,而不是源代码行,一行源代码可能对应于数行机器语言。可以单步调试的GDB之所以可以使用源代码行,是因为可执行文件中包含了额外的信息。

4、监视点与断点的区别:虽然都会在特定条件下暂停程序的执行,但断点与源代码中的位置关联,而监视点与变量生命周期关联。

5、(gdb) print display command call

6、程序崩溃:硬件会感知程序试图在未经允许的情况下访问一个内存单元,并执行对操作系统的跳转(核心转储)

7、strace:跟踪进程做过的所有系统调用,类似的有ltrace:跟踪进程调用库函数的情况

8、在真正复杂的网络调试情况中,可以使用开源Ethereal程序跟踪单个TCP/IP分组

9、gdb coredump 调用流程:

    $gdb exefile core

    (gdb) backstrace

    #0 0x400a925 in strcpy() from /lib/libc.so.6

    #1 0x084084df in Init_string from ....

    #2 0x084085e4 in main ....

10、调试期间,修改代码不用退出GDB,节省启动时间,保留断点。

------------多活动上下文的调试-------------------------

11、info threads : 给出关于当前所有线程的信息,

        thread 3:当前线程改成3;

        break 88 thread 3:当线程3到达88行时暂停执行,

        break 88 thread 3 if x == y:当线程3到达源代码88行,并且变量x和y相等时停止执行

12、并行编程框架主要有两种:共享内存和消息传递。其中,多线程编程的底层实现就是共享内存。共享内存和消息传递分别比较典型的实现是OpenMP和MPI包。

13、splint:动态检查C语言程序安全弱点和编写错误的工具,类似的针对C++的,cppcheck

14、valgrind:一款基于linux,用于内存调试、内存泄漏检测以及性能分析的软件开发工具

15、gcj:将java源代码编译为本地机器代码,因此可以用GDB调试,也就可以用条件断点了,比JDB更强大,而且不用新学一种调试器,运行速度也更快。

16、swig:simplified wrapper and interface generator:将C/C++编写的软件包装编译,与其它各种高级编程语言(特别是脚本语言)进行嵌入联接的开发工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值