gdb是linux下用来调试的一款软件,在这里,我只记录平常经常会用到的知识点,用到什么,就记录什么,在调试环境中去熟悉调试方法和调试工具,这才会加深理解。

  gdb能够做什么?它可以按照你的定义,随心所欲控制你的程序,让程序在你所指定的断点处停住,当停住时,你可以检查你程序中所发生的事情,也可以动态的改变程序的执行环境。前期你需要做的准备工作,只需要在编译时,添加-g选项就可以了。

b 函数名/行数

b filename:linenum 

b info   //查看断点信息

delete breakpints  //删除断点

break 命令没有参数时,表示在下一条指令处停住。

b if i = 3   当i为3时,设置为断点,停住程序。

info b 查看断点

r 一直运行,知道遇到断点或者退出

s 一步一步运行,遇到函数则进入  s <count>:单步执行后面的count条指令,然后停下来

n 遇到函数则直接执行,不进入。

c 继续执行程序,直到遇到下一个断点或者程序退出

finish 运行程序,直到当前函数完成返回,并且打印函数的返回的堆栈地址,返回值以及参数信息。

u 运行程序,直到退出循环体

bt    查看函数堆栈

p i    打印变量i的值

查看数组的值或者一段连续内存空间的值,你可以使用gdb的@操作符,“@”左边的是第一个内存的地址值,右边是你想要查看内存的长度。

例如:

 int *array  =(int *)malloc(len * sizeof(int));

在调试过程中,可以使用 p *array@len来查看相关内容,如果是静态数组,那么p array就是数组的内容,

 

watch i    ;设置观察变量,一旦变量变化,则停止运行。

3。在调试过程中,可以执行shell命令,也可以执行make命令,会调用当前目录的Makefile来编译新的程序,因此,在调试时,可以动态修改代码,编译并且调试,而无需退出gdb的调试命令接口。

.

4. 设置运行参数

set args 10 20 30 40 50   设置运行参数   //argc = 6 argv[0]=程序名称 argv[1]=10 argv[5]=50

show args

info program   //查看程序运行状态

其他高级功能,等到以后用到的时候,再去深入体会学习。

linux之gdb使用的更多相关文章

  1. 使用linux的GDB打印STL(vector,map,set..................)

    在linux用gdb或者cgdb计较不爽的地方是无法打印STL的东西,所有啊去网上找了找解决方案https://www.douban.com/note/182826844/?qq-pf-to=pcqq ...

  2. Linux之GDB学习

    Linux之GDB学习 GDB是一款优秀的调试工具,懂的人自然懂,一直以来用它都没有好好整理过使用方法,我用的也是皮毛,目前先整理一下皮毛,日后再更新 使用方法 编译C++ 从编译的角度上来说,需要在 ...

  3. linux中gdb的可视化调试

    今天get到一个在linux下gdb调试程序的技巧和大家分享一下!平时我们利用gcc进行编程,进行程序调试时,观察程序的跳转等不是这么直观.都是入下的界面! 但是如果我们在编译连接时上加了-g命令生成 ...

  4. Linux知识(5)----LINUX下GDB调试

    命令 解释 示例   file 加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径. (gdb) file gdb-sample     r c Run的简 ...

  5. 一文入门Linux下gdb调试(二)

    作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述     今天我们介绍一下core dump文件,Core dump叫做核心转储,它是进程运行时在突然崩溃的 ...

  6. linux下gdb如何处理coredump错误

    linux下gdb如何处理coredump错误 在编写C++程序中,我们经常会遇到一种错误,segment fault, 这种coredump错误 会导致程序运行时异常退出或者终止,这种错误没有明显错 ...

  7. 【转载】Linux之gdb

    转载自:http://blog.chinaunix.net/uid-22312037-id-3812061.html 一.常规调试         gdb是Linux下常用的程序调试工具,当然前提是用 ...

  8. 【Linux】gdb调试core文件

    编写服务器端程序,很容易遇到Crash问题,比较幸运的是Linux提供了core file,保留了Crash的现场.有时候,根据当前的调用栈,并且打印出当前栈的变量就可以分析出crash的原因,但是, ...

  9. linux之GDB常用命令汇总

    查看gdb的版本号 (1)rpm -q gdb 会显示是否安装gdb及版本号 (2)gdb --version也可以 breakpoint b main; b 20; 设置断点 breakpoint ...

随机推荐

  1. Java和C#在面向对象上语法的区别

    做了几年了开发一直没有总结什么,回到了家乡的小城做了一名培训班的教员,教授软件开发的知识.细小的知识从头细细嚼来,别有一番滋味.或是以前遗漏的太多,或是确实没有系统的学习过,教学生的过程中自己也对教材 ...

  2. error LNK2019: unresolved external symbol / error LNK2001: 无法解析的外部符号

    在 vc++ 2008 和 vc++ 2010 编译时分别出现上面的错误.一般这种错误是由于引用函数未定义造成的,如外部类库未包含,实现代码未编写等. 但最终检查的结果,却是另外一种情况:文件名重名. ...

  3. Python 学习之二:Python超短教程

    前言 本教程综合Stanford CS231N和UC Berkerley CS188的Python教程. 教程非常短,但适合有一定编程基础.学过其它语言的童鞋. Python 启动Python 解释器 ...

  4. 线程控制之线程和I/O

    http://www.cnblogs.com/nufangrensheng/p/3498723.html中介绍了pread和pwrite函数,这些函数在多线程环境下是非常有帮助的,因为进程中的所有线程 ...

  5. 【天池大数据赛题解析】资金流入流出预测(附Top4答辩ppt)

    http://mp.weixin.qq.com/s?__biz=MzA3MDg0MjgxNQ==&mid=208451006&idx=1&sn=532e41cf020a0673 ...

  6. apache常见错误汇总

    <>问题: Access forbidden! You don't have permission to access the requested directory. There is ...

  7. Intellij IDEA 使用Debug模式运行非常慢

    今天在用Debug的时候,idea运行非常慢,搜了一下有人说: 自己检查发现果然如此,把在方法前的断点去掉(移到方法体内),就正常了.

  8. C#动态引用DLL的方法

    C#编程中,使用dll调用是经常的事,这样做的好处是非常多的,比如把某些功能封装到一个dll中,然后主程序动态调用这个dll. 废话不多说,举例说明如下. 首先,我们需要封装一个dll,vs2008下 ...

  9. C#动态加载程序集(转)

    C#动态加载程序集 今天在看网络上的一篇关于‘.NET应用自动部署窗体技术’.NET的自动部署技术构造在.NET框架之中,它使得应用程序能够通过HTTP连接从远程服 务器按需下载程序集.有了这个功能, ...

  10. CSS skills: 6) auto hide the top bar javascript

    //jquery $(document).ready(function(){ $(window).scroll(function() { $(this).scrollTop() > 10 ? $ ...