在实际的开发过程中我们常常需要定位问题,通过增加打印的方式来理解代码或者debug代码。还在Linux提供gdb工具来进行程序的调测。但是gdb图形界面稍微简陋了点。因此这里建议使用cgdb工具,内容稍微比gdb丰富点。
我装了一个cgdb-0.6.8-1.el7.x86_64版本的cgdb.
当一个进程运行了或者还没有运行,都可以用gdb 进行调测,如果进程先运行了,则可以将gdb attach到改进程,此时改进程处于T状态(暂停状态或跟踪状态)。如果进程或者程序没有启动,也可以直接gdb 改进程文件,然后调测改进程。实际工作中我们更多的是将gdb attach到一个运行的进程上去。
比如:
#cgdb -p 29192 这里29192为正在调测的进程PID。此时如果产看进程的话,改进程状态为t
1、测试需要指定在那个文件的那行打个断点,然后出发一个能激活该断点的动作,比如跑个IO,写个数据,读个数据。
(gdb)b file:line_num //file指的是那个文件,比如test.cc,line_num指的是该文件中哪行。(gdb) b test.cc:123
2、此时在gdb中执行c,如:(gdb) c 此时进程则处于s状态。
3、此时就触发了断点,界面上面就会停留在源代码断点哪行。此时可以通过n: 下一步,s:进入到函数内。finish完成这个函数,回车默认执行一个命令,bt产看当前堆栈,p + 变量名查看变量信息,info break 查看断点信息。可以设置输出文件: set logging file outputfilename 这只输出文件;set logging on:打开日志功能, q 退出gdb模式,d 删除断点,until +行号表示运行到指定的行,esc键表示切换到代码界面,i键保湿切换到gdb命令行界面。