打造远胜IDE的调试器gdb

来源:互联网 发布:淘宝刷流量软件购买 编辑:程序博客网 时间:2024/06/05 22:56
摘要:在编程过程中,最消耗时间的莫过于编码和调试,而这两项又和我们使用的工具具有很大的关系。对于从windows转到linux/Unix上的用户来说,更是如此。在这里,我们跳过系统优劣之争论,教你如何打造属于自己的编程环境。本文是针对广大linux平台用户而言(你也可以在win下使用相关工具),目标是打造比IDEelipse或者VS)更高效的编程环境。如果你有什么好的使用习惯和心得,谢谢分享给我。

1.前沿

gdb是我们用来调试程序的工具,它可以用来:1)运行程序 2)让程序停止到任何你想要停止的地方 3)在程序结束之后,查看程序发生了什么 4)在程序运行过程中改变程序行为。高效使用gdb包含三个层次:第一,能使用gdb的基本命令(startbreakcontinue等)运行和调试程序。第二,会使用gdb的高级命令来观察程执行过程中的行为(函数堆栈,变量监控等)。第三,自定义gdb宏,从而让你的gdb能够随心所欲地运行。关于gdb的基本命令和高级命令,你可以参考这里:本文只是对最长用的命令加以整理而已。

2.gdb基本命令简介

checklist:如何让程序开始运行——start如何在某一行设置断点——break如何删除断点、如何禁用断点如何让程序连续运行,在断点处停止——continue如何单步调试——next如何进入函数内部——step如何查看那上下文代码——list

3.高级命令

如何设置条件断点——break如何检测某个变量或者表达式的值——watch如何让调试更加自动化——commands------end如何让程序从当前循环或者函数退出——finish /util如何查看变量的值——print自动化调试——commands如何查看函数堆栈——stack如何避免每次调试都输入同样的命令—— -x选项

4.定义gdb

这一部分是高效使用gdb的关键所在,用好了,能够让gdb的调试效率要远远高于IDEgdb在运行之前,会读取gdb的配置文件,~/.gdbinit,这个文件的作用类似于~/.vimrc。我们可以在里面定义一些常用的操作,从而加快gdb调试时候的运行。下面,看看我主要用的一些gdb配置,更多详细的gdb配置可以看这里:其中,gdb配置文件的格式如下:define commandnamecommandenddocument commandnamecommentend具体内容如下,可以通过查看document来分析相应命令实现的功能,本文不再一一列举。总结一下下面的配置实现的功能:清屏cls、显示断点信息bpl、设置断点(bp)、清理断点bpc、断点使能bpe、断点禁用bpd、临时断点bpt、监视点bpm、执行到第几行goto
define clsshell clearenddocument clsClears the screen with a simple command.enddefine bplinfo breakpointsenddocument bplList breakpointsenddefine bpbreak  $arg0enddocument bpSet a breakpoint on addressUsage: bp addrenddefine bpcclear $arg0enddocument bpcClear breakpoint at function/addressUsage: bpc addrenddefine bpeenable $arg0enddocument bpeEnable breakpoint #Usage: bpe numenddefine bpddisable $arg0enddocument bpdDisable breakpoint #Usage: bpd numenddefine bpttbreak $arg0enddocument bptSet a temporary breakpoint on addressUsage: bpt addrenddefine bpmawatch $arg0enddocument bpmSet a read/write breakpoint on addressUsage: bpm addrend##otherdefine gototbreak $arg0continueenddocument gotorun to cursorUsage goto linenumend####pro infodefine argvshow argsenddocument argvPrint program argumentsenddefine funcinfo functionsenddocument funcPrint functions in targetenddefine varinfo variablesenddocument varPrint variables (symbols) in targetenddefine libinfo sharedlibraryenddocument libPrint shared libraries linked to targetenddefine siginfo signalsenddocument sigPrint signal actions for targetenddefine threadinfo threadsenddocument threadPrint threads in targetenddefine uinfo udotenddocument uPrint kernel 'user' struct for targetenddefine disdisassemble $arg0enddocument disDisassemble addressUsage: dis addrend## only stack and frame and argv is need

0 0
原创粉丝点击