- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用 GDB
一般来说 GDB 主要调试的是 C/C++的程序。要调试 C/C++的程序,首先在编译时,我们必须
要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++ )的 -g 参数可以做到这一点。
如:
cc -g hello.c -o hello
g++ -g hello.cpp -o hello
如果没有-g ,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你
用-g 把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用 gdb 来调试他。
进入 GDB
启动 GDB 的方法有以下几种:
1、gdb program
program 也就是你的执行文件,一般在当然目录下。
2、gdb program core
用 gdb 同时调试一个运行程序和 core 文件,core 是程序非法执行后 core dump 后产生的文
件。
3、gdb pid
如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程 ID。gdb 会自动
attach 上去,并调试他。program 应该在 PATH 环境变量中搜索得到。
GDB 启动时,可以加上一些 GDB 的启动开关,详细的开关可以用 gdb -help 查看。我在下面
只例举一些比较常用的参数:
参数 说明
-symbols [file](-s) 读取文件中的符号表
-exec [file] (-e) 调试一个可执行文件
-se [file] 上二者的缩写
-core [file](-c) 读入一个 core dump 文件
-pid number (-p) 启动 attach 模式,除错一个执行中的行程。number
是目标行程的 pid
-directory [directory] (-d) 将 directory 加入原始码的搜寻路
-readnow (-r) 一次读取完所有的符号表,这会让启动 gdb 的时间
变长,但在执行往后的除错动作会较快速。
下列还有部分选择性的参数,我列出几个目前用的到的:
-quiet -silent -q 安静模式,启动时 gdb 将不会显示版权页。
-windows -w 与下一选项相反,这会启动 GUI
-nowindows -nw 如果 gdb 有编入 GUI 的话,这个选项会关掉它。
-cd [directory] 切换工作目录为 directory 而不是现在的目录
-tty [device](-t) 指定 device 为程式的标准输出入
--args 这个参数要当作命令列的最后一个参数,其后跟随
的参数都会被视为「欲传给将调试的程序的参数」
当然我们也不一定要在启动时指定调试来源。
file 指令可以指定要调试的程序,功能就与-se 一样,其实这样指定是比较方便的。 在执
行程序前,我们可以先指定命令列参数,如同--args 参数的效果。
程序运行参数
set args 指定运行时的命令列参数
show args 查看现在的命令列参数是什么。由于 gdb 调试的对象是已经编译好的可执行文
件,所以这里我们不必像 VS.NE 一样等半天。有一点必须注意,gdb 传给程序的命令列参数
是程序开始执行前的那一份命令列参数,如果程序已经开始执行,就算用中断点中断执行然
后改变命令列参数,也只会在下一次执行时变更才会生效。
运行环境
path 设定程序的运行路径。
show paths 查看程序的运行路径。
set environment varname [=value] 设置环境变量,如 set env USR =
show environment [varname] 查看环境变量。
工作目录
cd 相当于 shell 的 cd 命令。
Pwd 显示当前的所在目录。
程序的输入输出
info terminal 显示你程序用到的终端的模式。
使用重
文档评论(0)