GDB的使用(搜集)

2009-05-13 05:00:41来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

要使用GDB进行调试,编译程序时要指定-g或-ggdb的编译选项。
如:
gcc –g main.c
gcc –ggdb main.c
这样,gcc就会在生成可执行文件时产生调试讯息。-g用于产生一般的调试讯息,-ggdb则用于产生GDB特有的调试讯息。
GDB的基本指令:

f(ile):指定一个可执行文件进行调试,gdb将读取些文件的调试讯息,如f a.exe

l(ist):列程序出源文件

r(un) :装载完要调试的可执行文件后,可以用run命令运行可执行文件

b(reak):设置断点(break point),如b 25,则在源程序的第25行设置一个断点,当程序执行到第25行时,就会产生中断;也可以使用b funcname,funcname为函数的名称,当程序调用些函数时,则产生中断

c(ontinue):c命令可以另中断的程序继续执行,直到下一个中断点或程序结束

p(rint):输入某个变量的值,如程序定义了一个int aa的就是,p aa就会输出aa的当前值

n(ext):程序执行到断点时中断执行,可以用n指令进行单步执行

s(tep):程序执行到断点时中断执行,可以用s指令进行单步执行进某一函数

q(uit):退出GDB
记录输出日志
你可能想保存GDB命令的输出到一个文件中去。这里有几个命令来控制GDB的记录功能。
set logging on    打开记录功能。
set logging off   关闭记录功能。
set logging file file   改变当前日志文件的名称。默认的日志文件是`gdb.txt'。
set logging overwrite [on|off]
默认情况下,GDB会添加到日志文件中。如果你set logging on想复盖掉日志文件,
就设置overwrite。
set logging redirect [on|off]
默认情况下,GDB会输出到终端和日志文件。如果你想仅仅输出到日志文件,设置redirect。
show logging
显示日志设置的当前值。
为调试而编译
为了有效地调试一个程序, 你需要在编译时生成调试信息. 调试信息是存储在目标文件中的, 它描述了各个变量和函数的数据类型, 以及源代码行号与可执行代码地址之间的对应关系.
要加入调试信息, 需在运行编译器gcc时加入 ‘-g’选项.
一般,交付给客户的程序是需要优化编译的, 用了 ‘-O’编译器选项. 然而, 许多编译器是无法一起处理‘-g’和‘-O’选项的. 所以用这些编译器时, 不可能生成带有调试信息的优化的可执行文件.
GCC, GNU C/C++ 编译器, 支持带和不带‘-O’ 的‘-g’, 使得调试优化代码成为可能. 我们推荐你始终在编译程序时用‘-g’. 也许你自认为程序是正确无误的,但没有必要打这个赌。
当你调试一个用‘-g -O’编译的程序时, 记住: 优化器重新整理了你的代码, 而调试器给你看的是实际存在的(优化後的代码). 不要太惊讶,
如果实际执行路径并不能精确对应你的源文件. 一个极端的例子是: 如果你定义了一个变量, 但并没有用它, GDB 就不可能看见这个变量,
因为编译器把它优化没了.
有些情况下‘-g -O’并不像‘-g’一样, 特别是在有指令调度的机器上. 如果有疑问, 重新编译, 只使用‘-g’
程序环境
环境由一组环境变量和它们的值组成。环境变量通常记录着这些:你的用户名,你的主目录,你的终端类型,以及你的要运行程序的搜索路径。一般你用
shell 设置环境变量,然後它们会由你运行的其他程序继承。调试时,试着用修改的环境运行你的程序而不需要重新启动 GDB,这是很有用的。
path directory
把 directory 加到将会传给你的程序的 PATH 环境变量(可执行文件的搜索路径)的前面。
show paths

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Linux下ARP绑定

下一篇:开发者发行版:PC-BSD 1.3 Beta 1