博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gdb调试带参数程序
阅读量:6609 次
发布时间:2019-06-24

本文共 1444 字,大约阅读时间需要 4 分钟。

一般来说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的方法有以下几种: 
1、gdb <program> 
program也就是你的执行文件,一般在当然目录下。 
2、gdb <program> core 
用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生 
的文件。 
3、gdb <program> <PID> 
如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gd 
b会自动attach上去,并调试他。program应该在 PATH环境变量中搜索得到。 
GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。我在下面只 
例举一些比较常用的参数: 
-symbols <file> 
-s <file> 
从指定文件中读取符号表。 
-se file 
从指定文件中读取符号表信息,并把他用在可执行文件中。 
-core <file> 
-c <file> 
调试时core dump的core文件。 
-directory <directory> 
-d <directory> 
加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。

当以gdb <program>方式启动gdb后,gdb会在PATH路径和当前目录中搜索<program>的源文件 

。 如要确认gdb是否读到源文件,可使用l或list命令,看看gdb是否能列出源代码。 
在gdb中,运行程序使用r或是run命令。 程序的运行,你有可能需要设置下面四方面的事。 
1、程序运行参数。 
set args 可指定运行时参数。(如:set args 10 20 30 40 50) 
show args 命令可以查看设置好的运行参数。 
2、 运行环境。 
path <dir> 可设定程序的运行路径。 
show paths 查看程序的运行路径。 
set environment varname [=value] 设置环境变量。如:set env USER=hchen 
show environment [varname] 查看环境变量。 
3、工作目录。 
cd <dir> 相当于shell的cd命令。 
pwd 显示当前的所在目录。 
4、程序的输入输出。 
info terminal 显示你程序用到的终端的模式。 
使用重定向控制程序输出。如:run > outfile 
tty命令可以指写输入输出的终端设备。如:tty /dev/ttyb
具体来说就是

例如一个程序名为prog 参数为 -l a -C abc
则,运行gcc/g++ -g  prog.c/cpp -o prog
就可以用gdb调试程序prog
#gdb prog
进入gdb调试界面
输入参数命令set args 后面加上程序所要用的参数,注意,不再带有程序名,直接加参数,如:
set args -l a -C abc
回车后输入
r
即可开始运行

转载地址:http://ixiso.baihongyu.com/

你可能感兴趣的文章
DevOps组件高可用的思路
查看>>
下:比拼生态和未来,Spark和Flink哪家强?
查看>>
Android——Reflect反射——破除限制
查看>>
MySQL源码学习——DBUG调试
查看>>
django 快速入门
查看>>
项目跟了一年,客户最后说不做了
查看>>
Swashbuckle Swagger组件扩展
查看>>
python——高级特性
查看>>
SOTON私人定制:利用Python进行数据分析(前言、案例和IPython)
查看>>
如何用Python爬数据?(一)网页抓取
查看>>
Python3入门机器学习 - 数据可视化基础matplotlib
查看>>
MySQL Index Extensions
查看>>
Soul 1.0.5 发布,基于 WebFlux 的 Reactive 网关
查看>>
每次压力大到爆,驾校教练总爱跑敬老院干这件事
查看>>
[Spring实战系列](16)面向切面编程(AOP)概述
查看>>
ansible的模块理解<3>
查看>>
车联网上云最佳实践(二)
查看>>
roncoo-pay 开源支付系统全新架构升级
查看>>
python:pycharm:突然之间引用同一个目录下的其他模块不出现代码提示的问题解决方法...
查看>>
医药B2B平台药兜网获数千万元A1轮融资,中国最早一批获得A证企业之一
查看>>