GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:
●启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
●可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
●当程序被停住时,可以检查此时你的程序中所发生的事。
●动态的改变你程序的执行环境。
调试指令:
gdb+a.out
l :从main函数开始开始
l + 行号
l + 函数名
b + 行号:设断点
b + 函数名
i b:查看断点信息
r:执行(有断点则在第一个断点处停下来)
n:单步向下执行
s:单步执行,且可以进入函数
print +内容:打印内容
whatis +内容:查看该内容的类型
d +编号:删除编号处(不是行号)的断点。
b +行号 if i==9:设置条件断点
finish:执行到当前函数返回处(退出函数)
bt:打印栈帧关系
首先直接列出问题及其解决方法:设置a.cpp:1234这样的断点后(断点位于.so文件中),gdb知道停在哪个函数,并能够停下来,但是无法显示源文件名及行号,也无法看到源码。明显是gdb有问题或者是调试信息有问题,我试遍了-g , -gstabs , -ggdb , -gstabs+参数,最终,-gstabs+参数可以和我的gdb完美配合,输出了我想要的东西,能够在debug的时候正确的看到函数名,行号,并能正确的看到源代码。这段话是在我解决问题之后添加在原文章之前的。供快速参考。好了,现在来看一个一般性的问题:有时候在用gdb调试程序的时候,发现gdb找不到源码。用list命令无效。记住: gdb的调试信息中并不包含源码,只是包含了怎样去寻找源码,但是因为某种原因,比如你的源码转移了位置或者别的原因。你需要告诉gdb到哪里去寻找源码。这个通过directory命令来实现。 要查看当前gdb寻找源码的路径:show directories添加一个新的路径到查找路径:dir  dirname添加多个时,个dirname用: 分开。详细见 : http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_48.html 另外:有时候发现调试信息不正确,或者没有调试信息,而gcc在编译的时候使用的参数为-g ,这时,可以个参数-g 该为-gstabs 就可以了。 我现在碰到的就是这种情况,具体原因还不是很清楚。当利用-gstabs编译以后,程序在停下来的时候,会显示函数堆栈,每个栈会显示源文件以及行数,但是源代码还是列不出来,原因是directory还没有设好 。后来发现-gstabs编译后,有些源码的位置被弄错了。继续尝试-gstabs+ , 最终才看到期望的效果。 需要后续的去了解下这几个参数之前的区别以及为什么要这么用。
---------------------
作者:sunxiaopengsun
来源:CSDN
原文:https://blog.csdn.net/sunxiaopengsun/article/details/79445300
版权声明:本文为博主原创文章,转载请附上博文链接!
---------------------
作者:龙跃十二
来源:CSDN
原文:https://blog.csdn.net/qq_38646470/article/details/79901401
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/xxjb/p/9942796.html

linux下gdb调试查看源代码相关推荐

  1. linux下gdb调试方法和技巧详解

    linux下gdb调试方法和技巧整理 简介 UNIX或者UNIX-like下调试工具 启动gdb # 1. 在可执行程序不需要输入参数时,我们可以使用 gdb + 可执行程序 gdb ./typeid ...

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

    点击"蓝字"关注我吧 作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述     今天我们介绍一下core dump文件,Core dum ...

  3. linux gdb网络调试,一文入门Linux下gdb调试(二)

    本文转载自[微信公众号:羽林君,ID:Conscience_Remains] 总述 今天我们介绍一下core dump文件,Core dump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快 ...

  4. LINUX下GDB调试

    LINUX下GDB调试 (gdb) p result[2]=33 $5 = 33 (gdb) p printf("result[2]=%d\n", result[2]) resul ...

  5. Linux下gdb调试用法

    稍微小小介绍一下 gdb是GUN组织开发的Linux下的调试利器.一般用于调试C/C++程序. GDB主要有以下4个功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 2.可让被调 ...

  6. linux下gdb调试方法与技巧整理

    目录 一.gdb简介 二.gdb使用流程 1.启动gdb 2.查看源码 3.运行程序 4.设置断点 5.单步执行 6.查看变量 7.退出gdb 三.gdb基本使用命令 1.运行命令 2.设置断点 3. ...

  7. Linux下 gdb调试打印数组元素说明

    一. 打印数组元素 下面以下面代码为例,在 gdb 调试中进行打印操作,说明一下.代码如下: #include <stdio.h>int main(void) {int n = 0;int ...

  8. linux常用调试,linux下gdb常用的调试命令

    用gdb调试程序时,常常很困惑一些命令的使用,要么是不知道这个命令,要么忘了命令的使用方法.接下来是小编为大家收集的linux下gdb常用的调试命令,希望能帮到大家. linux下gdb常用的调试命令 ...

  9. linux下调试thread 类_linux下GDB调试

    linux下GDB是一个非常强大的调试工具,但是他不像vs一样具有强大的图形界面,基本都靠命令来进行调试,对于新手来说也算是个坎.下面就跟大家一起探究一下gdb这个强大的调试工具. 1.开启core ...

  10. linux单步调试方法,linux下gdb单步调试(中).doc

    linux下gdb单步调试(中) linux下gdb单步调试(中) linux下gdb单步调试(中) 一.设置断点( BreakPoint ) 我们用 break 命令来设置断点.正面有几点设置断点的 ...

最新文章

  1. python snmp 交换机 配置文件_编译安装SNMP,snmpd.conf配置文件说明
  2. 如何解决ORA-12547错误!
  3. 把CentOS启动进度条替换为详细信息
  4. python数据科学-单变量数据分析
  5. C#时间与时间戳格式互相转化
  6. python opencv旋转_Python opencv实现与rotatedrect类似的矩形旋转,pythonopencv,RotatedRect
  7. Linux 时间同步问题_qingshanli1988-ChinaUnix博客
  8. java sql inj_Java防止SQL注入的几个途径
  9. 布料系统原理浅析和在Unity手游中的应用
  10. 自适应屏幕空间环境光遮蔽
  11. 地址栏中输入IP地址提示指定的网络名不再可用的解决方法
  12. Coder中的Templates
  13. 移动彩信MM7 API JAVA 样例
  14. shel脚本基础系列(二)语法+运算+判断
  15. RTI_DDS调试日志
  16. 2022年江西省职业院校技能大赛“网络空间安全”比赛任务书
  17. Treap(二)——#10144. 「一本通 4.6 练习 1」宠物收养所
  18. 取消 android 内部收费,国产手机硬伤终于被揭开:若安卓系统下半年收费,该如何应对?...
  19. 微信小程序超级占内存_手机APP占内存?4款超赞的微信小程序,不用下载,拿去即可使用!...
  20. css中的单位换算_CSS中各种长度单位总结

热门文章

  1. 如何对ado.net做比较好的封装?
  2. python好看的绘图_【Python教程】绘制漂亮的柱状图
  3. vue 自定义组件的自定义属性
  4. Weui 结合 xmlHttpRequest 上传图片
  5. First Kernel-pwn
  6. 搭建nginx代理,为前端页面跨域调用接口
  7. 在vue中动态添加商品SKU
  8. 【WIP_S3】链表
  9. 防火墙设置对外开放port
  10. C++ Primer 第五版读书笔记