本文是通过学习左耳朵皓帝的文章,详见:http://blog.csdn.net/haoel

1.使用gdb

gdb主要是用来调试c和c++程序,首先在编译前我们先把调试信息加到可执行程序当中,使用参数 -g 可以实现这一点。

dzhwen@deng:~/first$ gcc -g tst.c -o tst
dzhwen@deng:~/first$ g++ -g tst.cpp -o tst

2.启动gdb

1.我们一般使用:gdb + 程序名字来启动gdb。

dzhwen@deng:~/first$ gdb tst

当然也不乏其他方法:

2、gdb <program> core
       用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

3、gdb <program> <PID>
       如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。

3.常见的gdb

1.help : 查看常见的命令帮助

(gdb) help
List of classes of commands: aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands Type "help" followed by a class name for a list of commands in that class.
Type "help all" for the list of all commands.
Type "help" followed by command name for full documentation.
Type "apropos word" to search for commands related to "word".
Command name abbreviations are allowed if unambiguous.

2.list,简写l:列出源码

(gdb) list
{
sum += i;
}
return sum;
} int main()
{
int i;
long result = ;

3.回车:重复上一次的命令

(gdb)
for(i = ;i <= ;++i)
{
result += i;
} printf("result[1-100] = %ld\n",result);
printf("result[1-250] = %d\n",func());
return ;
}

4.break + 数字  或者  break + 函数名 —— 设置断点

(gdb) break
Breakpoint at 0x804841a: file tst.c, line .
(gdb) break func
Breakpoint at 0x80483ea: file tst.c, line .

5.info + 信息 —— 查看各种信息

(gdb) info break —— 查看断点信息
Num Type Disp Enb Address What
breakpoint keep y 0x0804841a in main at tst.c:
breakpoint keep y 0x080483ea in func at tst.c:

6.run(简写r)—— 运行程序,遇到断点自动中断。

(gdb) run
Starting program: /home/dzhwen/first/tst Breakpoint , main () at tst.c:
long result = ;

7.next(简写n) —— 单条语句执行。

(gdb) next
for(i = ;i <= ;++i)

8.continue —— 继续执行(直到下一个断点中止)

(gdb) continue
Continuing.
result[-] = Breakpoint , func (n=) at tst.c:
int sum = ,i;

9.print(简写p) + 变量名 —— 打印变量的值,print命令简写。

(gdb) p sum
$ =
(gdb) n
for(i = ;i < n;++i)
(gdb) p i
$ =

10,bt —— 查看程序堆栈(包括main函数和其他调用的函数)

(gdb) bt
# func (n=) at tst.c:
# 0x08048461 in main () at tst.c:

11.finish —— 运行至函数退出

(gdb) finish
Run till exit from # func (n=) at tst.c:
0x08048461 in main () at tst.c:
printf("result[1-250] = %d\n",func());
Value returned is $ =

12.quit(简写q) —— 退出gdb

(gdb) quit

gdb初步就这些了吧,多多指教!

gdb初步窥探的更多相关文章

  1. 初步窥探Git

    码农之路恒久远,学习向上是真谛啊!在学习的过程中,相信大家或多或少都接触到Git这个东东.它到底是什么呢,有什么作用呢,为什么它会那么火呢?带着这些一连串的疑问,决心去揭开它的庐山真面目. 在软件开发 ...

  2. gdb 初步学习记录

    客户有一段代码,一个死循环, 里面就一个 times(NULL) 函数,以及一个usleep, 运行了10分钟左右就会出现段错误. 现在用 gdb 调试看一下是哪一步出现了问题. 在Linux 虚拟机 ...

  3. gcc初步窥探

    由于没有上过Linux编程这门课,所以Linux学得很水啊!!用来用去都是ls -al ; cd .. ;这些渣命令,尤其gcc都不知道什么东西来的,所以先学一下吧. 一.程序的编译过程 对于GUN编 ...

  4. DCOM初步窥探二

    1.COM进程透明性表现在“组件对象和客户程序可以拥有各自的空间,也可以共享同一个进程空间”. COM负责把客户的调用正确传到组件对象中,并保证参数传递的正确性. 组件对象和客户代码不必考虑调用传递的 ...

  5. dcom初步窥探一

    一.问题带入: 从delphi 5开始,有许多人都面临过这样的问题:com应用开发出来并且在本机上运行一切正常,但是一旦分发出去实施远程访问时,就无法正常运行了.我自己有段时间在看到“拒绝访问”错误提 ...

  6. python异步初步窥探

    1.异步之难:因为其执行吮吸不可预料,当下正要发生什么事件不可预料.        程序下一步行为往往依赖上一步值执行结果,如何知晓上次异步调用已完成并获取结果,        回调成了必然选择,那又 ...

  7. Maven整理笔记の初步窥探

    第一部分:引言 Maven是一款跨平台的项目管理工具,作为Apache组织的一个开源项目,主要服务于基于java平台的项目构建.依赖管理和项目信息管理. 项目构建:编译.运行单元测试.生成文档.打包和 ...

  8. Gradle学习系列(一)

    今天就开始学习Gradle构建了,听说很牛X.本篇内容就带领我初步窥探Gradle的世界.     1.什么是Gradle       相信之前都接触过用Ant或者Meavn进行项目的构建,两者各有千 ...

  9. socket网络编程快速上手(二)——细节问题(4)

    5.慢系统调用及EINTR 还记得前面readn和writen函数么?里面有个EINTR,现在就来谈谈这个,这个很重要. Linux世界有个叫信号的东西,感觉他就像一位隐士,很少遇到他,而他又无处不在 ...

随机推荐

  1. PAT甲题题解-1050. String Subtraction (20)-水题

    #include <iostream> #include <cstdio> #include <string.h> #include <algorithm&g ...

  2. 1084. Broken Keyboard (20)-水题

    #include <iostream> #include <cstdio> #include <string.h> #include <algorithm&g ...

  3. Daily Scrumming* 2015.12.10 今天集体请假一天

    今天由于所有成员均在进行编译原理实验的相关工作,全体请假一天.......

  4. #Linux第四周学习总结——扒开系统调用的三层皮(上)

    Linux第四周学习总结--扒开系统调用的三层皮(上) 一.用户态.内核态和中断 系统调用通过库函数. 1.用户态和内核态 区分(不同的指令执行级别): 用户态:在相应的低执行状态下,代码的掌控范围受 ...

  5. ffmpeg格式转换

    遇到有些wav文件在ubuntu下无法打开的情况,可以使用ffmpeg进行格式转换即可 ffmpeg -i 0.wav test.wav

  6. 在局域网内部实现远程web终端服务

    在局域网内部实现远程web终端服务 前言 如题,本文主要介绍了在局域网内部实现访问web终端服务功能. 实验环境 如下图所示,实验环境由三个部分组成:分别由局域网内部客户端.重定向服务器.以及两台提供 ...

  7. Beta版本冲刺(三)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  8. 关于断言(Assert)

    断言,字面上的意思大致是十分肯定的说,也就是说我们相信这个结果是真的.如果我们的断言不为真,那这个这个结果就和我们预期的结果不一样.在编程上同理,如果程序运行出来的结果和你想要的结果不一致,那你的程序 ...

  9. [From WIKI] IBM Z

    IBM zEnterprise System From Wikipedia, the free encyclopedia     Jump to navigationJump to search Hi ...

  10. 查看iOS应用crash日志

    基本操作: 1.电脑安装好Xcode,连接好手机设备 2.打开Xcode,点击Window-Devices and Simulators 3.选中手机设备,点击View Device Logs,即可查 ...