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

1.使用gdb

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

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

2.启动gdb

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

  1. 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 : 查看常见的命令帮助

  1. (gdb) help
  2. List of classes of commands:
  3.  
  4. aliases -- Aliases of other commands
  5. breakpoints -- Making program stop at certain points
  6. data -- Examining data
  7. files -- Specifying and examining files
  8. internals -- Maintenance commands
  9. obscure -- Obscure features
  10. running -- Running the program
  11. stack -- Examining the stack
  12. status -- Status inquiries
  13. support -- Support facilities
  14. tracepoints -- Tracing of program execution without stopping the program
  15. user-defined -- User-defined commands
  16.  
  17. Type "help" followed by a class name for a list of commands in that class.
  18. Type "help all" for the list of all commands.
  19. Type "help" followed by command name for full documentation.
  20. Type "apropos word" to search for commands related to "word".
  21. Command name abbreviations are allowed if unambiguous.

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

  1. (gdb) list
  2. {
  3. sum += i;
  4. }
  5. return sum;
  6. }
  7.  
  8. int main()
  9. {
  10. int i;
  11. long result = ;

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

  1. (gdb)
  2. for(i = ;i <= ;++i)
  3. {
  4. result += i;
  5. }
  6.  
  7. printf("result[1-100] = %ld\n",result);
  8. printf("result[1-250] = %d\n",func());
  9. return ;
  10. }

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

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

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

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

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

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

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

  1. (gdb) next
  2. for(i = ;i <= ;++i)

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

  1. (gdb) continue
  2. Continuing.
  3. result[-] =
  4.  
  5. Breakpoint , func (n=) at tst.c:
  6. int sum = ,i;

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

  1. (gdb) p sum
  2. $ =
  3. (gdb) n
  4. for(i = ;i < n;++i)
  5. (gdb) p i
  6. $ =

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

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

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

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

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

  1. (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. Appium+python自动化4-元素定位uiautomatorviewer

    前言 环境搭建好了,下一步元素定位,元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. uiautomatorviewer是androi ...

  2. 《Linux内核设计与实现》Chapter 18 读书笔记

    <Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功 ...

  3. OpenState: Programming Platform-independent Stateful OpenFlow Applications Inside the Switch

    文章名称:OpenState: Programming Platform-independent Stateful OpenFlow Applications Inside the Switch Op ...

  4. 小学四则运算APP 第一个冲刺 第二天

    团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次程序是为了解决上次判断的问题,但是还是出现新的问题页面无法调整,需要进行改进 本次改进代码 ...

  5. ns3的输入输出奥秘(一) LOGGING系统

    1.LOGGING系统 (1)在我们之前对C++的理解,输出好像就是cout,然而 以myfirst.cc为例子 在我们前面的编写的代码中并没有出现cout,那他是如何输出. 可以回忆一下 LogCo ...

  6. 注册和卸载window service

    自己开发的windows service编译之后会生成的exe文件,不能直接运行,必须通过工具注册进系统的Service. 使用cmd运行命令执行注册和卸载: 注册service: C:\Window ...

  7. 对于beta发布的评论

    第一组:新蜂小组 题目:俄罗斯方块 评论:主体功能已经完成,可以流畅的进行游戏,看项目的完成度是最高的.他们不但把核心功能做出来了,界面也已基本完成. 第二组:Nice团队 题目:约跑APP(约吧) ...

  8. 洛谷P2114 [NOI2014]起床困难综合症

    P2114 [NOI2014]起床困难综合症 题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作 ...

  9. Luogu4980 【模板】Polya定理(Polya定理+欧拉函数)

    对于置换0→i,1→i+1……,其中包含0的循环的元素个数显然是n/gcd(i,n),由对称性,循环节个数即为gcd(i,n). 那么要求的即为Σngcd(i,n)/n(i=0~n-1,也即1~n). ...

  10. Courses HDU - 1083 (二分匹配模板题)

    Consider a group of N students and P courses. Each student visits zero, one or more than one courses ...