gdb初步窥探
本文是通过学习左耳朵皓帝的文章,详见: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初步窥探的更多相关文章
- 初步窥探Git
码农之路恒久远,学习向上是真谛啊!在学习的过程中,相信大家或多或少都接触到Git这个东东.它到底是什么呢,有什么作用呢,为什么它会那么火呢?带着这些一连串的疑问,决心去揭开它的庐山真面目. 在软件开发 ...
- gdb 初步学习记录
客户有一段代码,一个死循环, 里面就一个 times(NULL) 函数,以及一个usleep, 运行了10分钟左右就会出现段错误. 现在用 gdb 调试看一下是哪一步出现了问题. 在Linux 虚拟机 ...
- gcc初步窥探
由于没有上过Linux编程这门课,所以Linux学得很水啊!!用来用去都是ls -al ; cd .. ;这些渣命令,尤其gcc都不知道什么东西来的,所以先学一下吧. 一.程序的编译过程 对于GUN编 ...
- DCOM初步窥探二
1.COM进程透明性表现在“组件对象和客户程序可以拥有各自的空间,也可以共享同一个进程空间”. COM负责把客户的调用正确传到组件对象中,并保证参数传递的正确性. 组件对象和客户代码不必考虑调用传递的 ...
- dcom初步窥探一
一.问题带入: 从delphi 5开始,有许多人都面临过这样的问题:com应用开发出来并且在本机上运行一切正常,但是一旦分发出去实施远程访问时,就无法正常运行了.我自己有段时间在看到“拒绝访问”错误提 ...
- python异步初步窥探
1.异步之难:因为其执行吮吸不可预料,当下正要发生什么事件不可预料. 程序下一步行为往往依赖上一步值执行结果,如何知晓上次异步调用已完成并获取结果, 回调成了必然选择,那又 ...
- Maven整理笔记の初步窥探
第一部分:引言 Maven是一款跨平台的项目管理工具,作为Apache组织的一个开源项目,主要服务于基于java平台的项目构建.依赖管理和项目信息管理. 项目构建:编译.运行单元测试.生成文档.打包和 ...
- Gradle学习系列(一)
今天就开始学习Gradle构建了,听说很牛X.本篇内容就带领我初步窥探Gradle的世界. 1.什么是Gradle 相信之前都接触过用Ant或者Meavn进行项目的构建,两者各有千 ...
- socket网络编程快速上手(二)——细节问题(4)
5.慢系统调用及EINTR 还记得前面readn和writen函数么?里面有个EINTR,现在就来谈谈这个,这个很重要. Linux世界有个叫信号的东西,感觉他就像一位隐士,很少遇到他,而他又无处不在 ...
随机推荐
- centos运行C程序
gcc -o Hello Hello.c 编译成可执行文件 ./Hello 运行 win上也是一样
- JS高级程序设计学习笔记1
javascript产生的原因: 在拨号上网时代,表单数据必须发送到服务器端才能验证输入值得有效性,JavaScript的研发就是为了解决这个问题,以便在客户端就验证输入值的有效性. ECMAScri ...
- 20135220谈愈敏Blog3_构造一个简单的Linux系统MenuOS
构造一个简单的Linux系统MenuOS 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1 ...
- 2013337朱荟潼 Linux第二章读书笔记——从内核出发
1.获取内核源码 1.1Git 分布式的:下载和管理Linux内核源代码: - 获取最新提交到版本树的一个副本 $ git clone git://git.kernel.org/pub/scm/lin ...
- 2017-2018 第一学期201623班《程序设计与数据结构》-第2&3周作业问题总结
一.作业内容 第二周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK02 第三周作业 作业一定按教学进程中的模板提交 本周学习任务 点评结对同学 ...
- “数学口袋精灵”第二个Sprint计划(第五天)
“数学口袋精灵”第二个Sprint计划----第五天进度 任务分配: 冯美欣:欢迎界面的背景音乐完善 吴舒婷:游戏界面的动作条,选择答案后的音效 林欢雯:代码算法设计 进度: 冯美欣:欢迎界面背景 ...
- 浅谈FPGA
浅谈FPGA 前言 生活中永远都不会缺少「 为什么 」,于最近就被合胜学长了,问了一个看似简单却又极具意义的问题,为什么需要FPGA?FPGA与单片机的区别是什么?瞬间刷新了我入门三天FPGA的冲击感 ...
- do
http://www.cnblogs.com/xdp-gacl/p/3791993.html http://blog.sina.com.cn/s/blog_95c8f1ac010198j2.html
- ubuntu18.04配置nvidia docker和远程连接ssh+远程桌面连接(三)
ubuntu18.04配置nvidia docker和远程连接ssh+远程桌面连接(三) 本教程适用于想要在远程服务器上配置docker图形界面用于深度学习的用户. (三)配置远程桌面连接访问dock ...
- myeclipse运行错误
错误出现为: !MESSAGE Product com.genuitec.myeclipse.product.ide could not be found. 这是在我将其它电脑上的myeclipse拷 ...