转自:http://www.cnblogs.com/rosesmall/archive/2012/04/10/2440514.html

一般来说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://blog.csdn.net/lw1a2/article/details/1001298
 
gdb --args ./testprg arg1 arg2
 

gdb调试带参数的程序 (转载)的更多相关文章

  1. c/c++ gdb 调试带参数的程序

    直接gdb pgname 参数1 这种方式,参数1是不会带到gdb里的 1,首先启动程序 gdb pgname 2,设置程序的参数 set args 参数1

  2. gdb调试带参数程序(转:笑笑小白,cnblog http://www.cnblogs.com/rosesmall/archive/2012/04/10/2440514.html)

    一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中.使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > ...

  3. gdb调试带参数程序

    一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中.使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > ...

  4. gdb 调试带参数程序

    在gdb中,运行程序使用r或是run命令. 程序的运行,你有可能需要设置下面四方面的事. 1.程序运行参数. set args 可指定运行时参数.(如:set args 10 20 30 40 50) ...

  5. gdb调试运行时的程序小技巧

    使用gdb调试运行时的程序小技巧 标签: 未分类 gdb pstack | 发表时间:2012-10-15 04:32 | 作者:士豪 分享到: 出处:http://rdc.taobao.com/bl ...

  6. Qt配置cmake;运行带参数的程序

    配置cmake编译器,步骤如下: 步骤1:  Qt下新建一个project. 步骤2:  在该project目录下创建一个CMakeLists.txt文件,并按规范编写该文件. Tip: projec ...

  7. 使用GDB调试产生多进程的程序

    如果一个进程fork了多个进程,这时使用GBD工具对程序进行调试会如何呢? 实际上,GDB 没有对多进程程序调试提供直接支持.例如,使用GDB调试某个进程,如果该进程fork了子进程,GDB会继续调试 ...

  8. vs2010下如何调试带输入参数的程序

    当main函数的输入参数为空时,我们可以很方便的通过设置断点,单步运行的方法调试,可是如果需要调试的是有输入参数的程序该怎么办呢?最终还是让我找到了: 英文版:Project -> Proper ...

  9. gdb调试正在运行的程序

    1.ps aux | grep mxx.exe 查找可执行程序的进程id 2.gdb attach pid attach可执行程序的进程pid 3.continue/c 或者continue or c ...

随机推荐

  1. Hbase调用JavaAPI实现批量导入操作

    将手机上网日志文件批量导入到Hbase中.操作步骤: 1.将日志文件(请下载附件)上传到HDFS中,利用hadoop的操作命令上传:hadoop  fs -put input  / 2.创建Hbase ...

  2. hdu 1689 Alien’s Necklace (bfs层次图剪枝)

    Alien's Necklace Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  3. react 创建组件 (四)Stateless Functional Component

    上面我们提到的创建组件的方式,都是用来创建包含状态和用户交互的复杂组件,当组件本身只是用来展示,所有数据都是通过props传入的时候,我们便可以使用Stateless Functional Compo ...

  4. Go fsm

    package fsm import ( "log" ) type EvtIf interface { GetEvtType() string } type Action inte ...

  5. RC4算法的Python实现详注

    刚对RC4算法进行了学习,网上发现https://ju.outofmemory.cn/entry/46753 中作者展示了RC4的python实现,但代码缺乏注释,较为晦涩,因此本文对部分代码进行了注 ...

  6. ajax的异步操作及页面重定向跳转

    今天主要分享一个简单的ajax的异步操作数据,用javascript也有一段时间了,刚开始看到一些页面在没有页面刷新的情况下就可以实现数据的保存或者获取,觉得挺不可思议的,感觉速度很快,做了几个项目之 ...

  7. JAVA运行时异常及常见的5中RuntimeExecption

    最近在抽时间看面试题,很多面试题都提出了写出java常见的5个运行时异常.现在来总结一下, java运行时异常是可能在java虚拟机正常工作时抛出的异常. java提供了两种异常机制.一种是运行时异常 ...

  8. 例子:两个表根据productID合并

  9. org.gradle.api.publication.maven.internal.DefaultMavenFactory错误

    Error:Unable to load class 'org.gradle.api.publication.maven.internal.DefaultMavenFactory'. Possible ...

  10. sqlldr的用法

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...