c++ gdb 绑定源码_gdb调试g++ -g生成文件,list后不能看到源代码
一、显示源代码
GDB可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。不然就看不到源程序了。当程序停下来以后,GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码。还是来看一看查看源代码的GDB命令吧。list 显示程序第linenum行的周围的源程序。list 显示函数名为function的函数的源程序。list显示当前行后面的源程序。list -显示当前行前面的源程序。
一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数。
set listsize 设置一次显示源代码的行数。show listsize查看当前listsize的设置。
list命令还有下面的用法:
list , 显示从first行到last行之间的源代码。list , 显示从当前行到last行之间的源代码。list +往后显示源代码。
一般来说在list后面可以跟以下这们的参数:
行号。当前行号的正偏移量。当前行号的负偏移量。哪个文件的哪一行。函数名。哪个文件中的哪个函数。程序运行时的语句在内存中的地址。
二、搜索源代码
不仅如此,GDB还提供了源代码搜索的命令:
forward-search ,search 向前面搜索。
reverse-search 全部搜索。
其中是正则表达式,也主一个字符串的匹配模式,关于正则表达式,我就不在这里讲了,还请各位查看相关资料。
三、指定源文件的路径
某些时候,用-g编译过后的执行程序中只是包括了源文件的名字,没有路径名。GDB提供了可以让你指定源文件的路径的命令,以便GDB进行搜索。
directory ,dir 加一个源文件路径到当前路径的前面。如果你要指定多个路径,
UNIX下你可以使用“:”,Windows下你可以使用“;”分隔。directory清除所有的自定义的源文件搜索路径信息。show directories显示定义了的源文件搜索路径。
四、源代码的内存
你可以使用info line命令来查看源代码在内存中的地址。info line后面可以跟“行号”,“函数名”,“文件名:行号”,“文件名:函数名”,这个命令会打印出所指定的源码在运行时的内存地址,如:
(gdb) info line tst.c:func
Line 5 of "tst.c" starts at address 0x8048456 and ends at 0x804845d .
还有一个命令(disassemble)你可以查看源程序的当前执行时的机器码,这个命令会把目前内存中的指令dump出来。如下面的示例表示查看函数func的汇编代码。
(gdb) disassemble func
Dump of assembler code for function func:
0x8048450 : push %ebp
0x8048451 : mov %esp,%ebp
0x8048453 : sub $0x18,%esp
0x8048456 : movl $0x0,0xfffffffc(%ebp)
0x804845d : movl $0x1,0xfffffff8(%ebp)
0x8048464 : mov 0xfffffff8(%ebp),%eax
0x8048467 : cmp 0x8(%ebp),%eax
0x804846a : jle 0x8048470
0x804846c : jmp 0x8048480
0x804846e : mov %esi,%esi
0x8048470 : mov 0xfffffff8(%ebp),%eax
0x8048473 : add %eax,0xfffffffc(%ebp)
0x8048476 : incl 0xfffffff8(%ebp)
0x8048479 : jmp 0x8048464
0x804847b : nop
0x804847c : lea 0x0(%esi,1),%esi
0x8048480 : mov 0xfffffffc(%ebp),%edx
0x8048483 : mov %edx,%eax
0x8048485 : jmp 0x8048487
0x8048487 : mov %ebp,%esp
0x8048489 : pop %ebp
0x804848a : ret
End of assembler dump.
c++ gdb 绑定源码_gdb调试g++ -g生成文件,list后不能看到源代码相关推荐
- c++ gdb 绑定源码_2020重学Go系列:30. 非常详细的 Go 语言 GDB 调试指南
做为新手,熟练掌握一个好的调试工具,对于我们学习语言或者排查问题的时候,非常有帮助. 你如果使用 VS Code 或者 Goland ,可以直接上手,我就不再写这方面的文章了. 其实相比有用户界面的 ...
- c++ gdb 绑定源码_【Vue原理】VNode 源码版
↑点击上方 "神仙朱" 一起研究Vue源码吧 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版 ...
- c++ gdb 绑定源码_第18篇:C++ 静态绑定和动态绑定
编译程序时,C ++编译器对源代码中的每个语句转换为一行或多行机器语言. 我们从之前的汇编基础系列和内存管理文章中,已经知道每行机器语言都有其自己的唯一的顺序地址. 由于函数也是一个数据对象,它也将转 ...
- 易语言调用大漠插件对雷电模拟器进行后台绑定源码
在 易语言大漠对雷电模拟器中控后台的绑定介绍了对雷电模拟器的绑定,这里再介绍一个方法,扩充一下大漠对雷电模拟器的后台绑定. 绑定源码: .版本 2 .支持库 spechwnd = FindWindow ...
- 源码级调试的XNU内核
i春秋翻译小组-FWorldCodeZ 源码级调试的XNU内核 无论你是在开发内核扩展,进行漏洞研究,还是还有其他需要进入macOS / iOS内核,XNU,有时你需要附加调试器.当你这样做时,使用源 ...
- visual MySQL 教程_MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试...
一:背景 1. 讲故事 上一篇说了mysql的架构图,很多同学反馈说不过瘾,毕竟还是听我讲故事,那这篇就来说一说怎么利用visual studio 对 mysql进行源码级调试,毕竟源码面前,不谈隐私 ...
- Linux环境下用OpenJTAG实现Linux内核的源码级调试
1.通过U-boot将uzImage格式的内核加载到内存中(可以从Flash中读取,也可以从U盘.SD卡读取,还可以通过网络): 2.登陆到OpenOCD上,在内核中__turn_mmu_on打上断点 ...
- idea调试源代码c语言,IDEA阅读spring源码并调试
目标:搭建起Spring源码阅读和代码调试跟踪的环境,顺便建立一个简单的Demo,能够调试Spring的源代码 本节,主要介绍一下Spring源码阅读和调试的相关环境搭建,并使用MVN创建一个非常简单 ...
- ffmpeg编译gb28181_RTSP/GB28181协议/海康SDK/Ehome协议视频上云网关EasyCVR视频平台在linux环境下ffmpeg源码单步调试环境搭建...
目前TSINGSEE青犀视频研发的视频上云服务平台EasyCVR已经可集成海康EHome私有协议,并且在前文中我也跟大家讲过EHome协议的配置和调用流程,有兴趣的可以阅读一下:配置及协议介绍.Eho ...
- pymavlink 源码剖析(一)之XML文件的数据解析
文章目录 1 引言 2 pymavlink 的代码自动生成方法 3 XML 文件的数据解析 3.1 XML 文件预处理 3.2 解析 XML 的数据 3.2.1 依据协议版本初始化一些版本特征变量 3 ...
最新文章
- [leetcode]Surrounded Regions @ Python
- android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。
- SSH,SCP,SFTP命令汇总
- golang go-sql-driver 数据库报错 bad connection
- 功能性农业投融资-农业大健康·周荣江:国情讲坛体制创新
- VTK:直线网格之VisualizeRectilinearGrid
- 在线网摘收藏?让Google来吧!
- 认识与入门 Markdown
- 开源工具 PrivateBin 修复XSS 漏洞
- python游戏图像识别_利用python做图像识别
- 小米无线网卡linux驱动下载,小米随身WiFi,Linux下AP热点驱动(开源)
- 黑科技项目:英雄无敌III Mod Fallen Angel介绍
- 06.complement 方法
- CSDN公式插入——关于对数
- python小程序之天天向上
- 交叉编译openssl(arm和x86_64)
- App项目实战之路(三):原型篇
- Android studio:select process to attach to...找不到debug调试的目录
- matlab信号内插,【 MATLAB 】MATLAB 实现模拟信号采样后的重建(三)应用三次样条函数spline实现内插...
- php字符串处理之全角半角转换(正则匹配全角字符思路)