本文由 @lonelyrains 出品,转载请注明出处。
文章链接: http://blog.csdn.net/lonelyrains/article/details/7755432
-------------调试基础------------------
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++编写的软件包装编译,与其它各种高级编程语言(特别是脚本语言)进行嵌入联接的开发工具。