gdb调试之set args
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。同时GDB也具有例如ddd这样的图形化的调试端。一般来说,GDB主要完成下面四个方面的功能:(1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。(2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。同时GDB也具有例如ddd这样的图形化的调试端。
一般来说,GDB主要完成下面四个方面的功能:
(1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
(2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
(3)当程序被停住时,可以检查此时你的程序中所发生的事。
(4)动态的改变你程序的执行环境。
*启动gdb,并且分屏显示源代码:
$gdb -tui
这样,使用了'-tui'选项,启动可以直接将屏幕分成两个部分,上面显示源代码,比用list方便多了。这时候使用上下方向键可以查看源代码,想要命令行使用上下键就用[Ctrl]n和[Ctrl]p.
*启动gdb调试指定程序app:
$gdb app
这样就在启动gdb之后直接载入了app可执行程序,需要注意的是,载入的app程序必须在编译的时候有gdb调试选项,例如'gcc -g app app.c',注意,如果修改了程序的源代码,但是没有编译,那么在gdb中显示的会是改动后的源代码,但是运行的是改动前的程序,这样会导致跟踪错乱的。
*载入指定的程序:
(gdb) file app
这样在gdb中载入想要调试的可执行程序app。如果刚开始运行gdb而不是用gdb app启动的话可以这样载入app程序,当然编译app的时候要加入-g调试选项。
修改发送给程序的参数:
(gdb) set args no
这里,假设我使用"r yes"设置程序启动参数为yes,那么这里的set args会设置参数argv[1]为no。
*显示缺省的参数列表:
(gdb) show args
执行完当前函数返回到调用它的函数:
(gdb) finish
这里,运行程序,直到当前函数运行完毕返回再停止。例如进入的单步执行如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish.
*指定程序直到退出当前循环体:
(gdb) until
或(gdb) u
这里,发现需要把光标停止在循环的头部,然后输入u这样就自动执行全部的循环了。
*强制返回当前函数:
(gdb) return
这样,将会忽略当前函数还没有执行完毕的语句,强制返回。return后面可以接一个表达式,表达式的返回值就是函数的返回值。
*设置条件断点:
(gdb) break 46 if testsize==100
这里,如果testsize==100就在46行处断点。
在当前的文件中为某一函数(假设为func)处设定断点:
(gdb) break func
*给指定文件(fileName)的某个行(N)处设置断点:
(gdb) break fileName:N
这里,给某文件中的函数设置断点是同理的。
*显示当前gdb断点信息:
(gdb) info breakpoints
这里,可以简写为info break.会显示当前所有的断点,断点号,断点位置等等
*删除N号断点:
(gdb) delete N
*删除所有断点:
(gdb) delete
*清除行N上面的所有断点:
(gdb) clear N
*显示当前调用函数堆栈中的函数:
(gdb) backtrace
命令产生一张列表,包含着从最近的过程开始的所有有效过程和调用这些过程的参数。当然,这里也会显示出当前运行到了哪里(文件,行)。
*查看当前调试程序的语言环境:
(gdb) show language
这里,如果gdb不能识别你所调试的程序,那么默认是c语言。
*查看当前函数的程序语言:
(gdb) info frame
*显示当前的调试源文件:
(gdb) info source
这样会显示当前所在的源代码文件信息,例如文件名称,程序语言等。
*手动设置当前的程序语言为c++:
(gdb) set language c++
这里,如果gdb没有检测出你的程序语言,你可以这样设置。
*查看可以设置的程序语言:
(gdb) set language
这里,使用没有参数的set language可以查看gdb中可以设置的程序语言。
*终止一个正在调试的程序:
(gdb) kill
这里,输入kill就会终止正在调试的程序了。
*显示一个变量var的类型:
(gdb) whatis var
*以更详细的方式显示变量var的类型:
(gdb) ptype var
这里,会打印出var的结构定义
更多推荐
所有评论(0)