源代码使用gdb的源代码查看功能

查看源代码  时间:2021-03-06  阅读:()

在调试程序的过程中可以自由地查看相关的源代码如果有源代码的话是一项最基本的特性。

一些IDE在这方面做得相当好 GDB当然也提供了这项特性虽然不如IDE直观但在一定程度上要比IDE更加灵活和快捷。

GDB之所以能够知道对应的源代码是因为调试版的可执行程序中记录了源代码的位置因为源代码的位置在编译之后可能会移动到其它地方所以GDB还会在当前目录中查找源代码另外GDB也允许明确指定源代码的搜索位置。默认情况下 GDB在编译时目录中搜索如果失败则在当前目录中搜索 即$cdir:$cwd其中$cdir指的是编译时目录compi lation directory  $cwd指的是当前工作目录current working directory 。

在GDB中使用查看源代码相关的命令时有一个当前文件的概念当命令的位置参数没有限定一个文件的时候不论是明确限定还是隐含限定 将使用当前文件。当前文件默认是main函数所在文件如果程序当前正处于断点位置则断点所在文件即为当前文件。

与当前文件的概念类似还存在一个当前行的概念它默认为main函数的开始处。如果使用gdb载入一个可执行文件然后单单执行一条简单的l ist命令你会发现输出的源代码并非是从第一行开始的这是因为当前行默认在main函数附近处的缘故。

1.设置和获取源代码显示数量

默认情况下 GDB显示指定位置处以及其前后的10行代码但是这是一个可设置的值。set l istsize count设置l ist命令显示的源代码数量最多为count行 0表示不限制行数。show l istsize显示l istsize的值。

2.编辑源代码

在一些情况下我们希望在编辑器中显示或者编辑源代码 GDB允许我们使用自己喜欢的编辑器。

可在环境变量EDITOR中指定GDB使用的编辑器例如 EDITOR=/usr/bin/gedit;export EDITOR;gdbed it location在编辑器中编辑位置location处的源代码如果省略location则编辑当前位置。

3.搜索源代码

有的时候我们希望在当前文件中进行搜索 GDB提供了这样的命令。sea rch regexp从当前行的下一行开始向前搜索。rev regexp 从当前行的上一行开始向后搜索。

有的时候你会发现search命令总是提示“Expression not found”这是因为当前行可能已经是最后一行了特别是文件很短的时候。这里需要注意的是任何l ist命令都会影响当前行的位置并且由于每次都是多行输出所以对当前行的影响并非简单地向前一行或者向后一行。search命令本身也会影响当前行的位置。

4.源代码位置

GDB之所以可以查看到源代码是因为它知道源代码放在哪里。

在一个调试会话中 GDB维护了一个源代码查找目录列表默认值是编译目录和当前工作目录。当GDB需要一个源文件的时候它依次在这些目录中查找直到找到一个或者抛出错误。

GDB还维护了一个路径替换规则将要搜索的原始路径按照找到的第一个规则做前缀替换然后再在源码搜索目录中查找文件。

GDB允许明确指定源代码位置或者路径替换规则 以应付源代码位置迁移的情况。directory path-l ist将一个或者多个源代码搜索目录加入到当前源码搜索目录列表的前面 目录之间使用空格间隔。directory不带参数的directory将源码搜索目录恢复为默认值。set directories path-l ist将源码目录设置为path-l ist但是会补上默认目录。show directories显示源码搜索目录列表。set substitute-path from to设置目录替换规则放置在规则列表的末端。unset substitute-path [path]删除path对应的替换规则或者删除所有的替换规则。show substitute-path [path] 显示path对应的替换规则或者显示所有的替换规则。

5.查看机器码

在一些必要的时候我们需要查看汇编代码来诊断问题。GDB提供了这种可能。

GDB提供了两种能力显示源代码位置与指令地址之间的映射显示指定位置的汇编代码。info l ine l inespec显示源代码l inespec处对应的汇编地址范围。info l ine *addr显示地址addr处对应的源代码位置。disassemble disassemble/m disassemble/r显示指定地址范围内的汇编代码有4种使用形式第一种不带参数显示当前正在执行的函数的汇编代码第二 种是一个参数显示该地址所在函数的汇编代码第三种是两个参数的disassemble start,end显示地址start end 内的汇编代码第四种是两个参数的 disassemble start,+length显示地址start start+length 内的汇编代码。参数可以是16进制的地址也可以是函数名。 /m表示混合输出源代码和汇编代码 /r表 示混合输出二进制和汇编代码。set disassembly-flavor instruction-set设置显示汇编代码时使用的风格 目前只针对intel x86系列可取的值为a tt和i n te l 默认是a tt。show disassem bly-flavor显示disassem bly-flavor设置set disassemble-next-l ine on|off|auto当程序停止下来的时候是否显示下一行源代码的汇编代码默认为off。show disassemble-next-l ine显示disassemble-next-line设置。

6.显示指定位置的源代码l ist命令可用于显示指定位置处的源代码。 l ist命令会影响当前行和当前文件。l ist命令有多种方式指定要显示的源代码范围可以是行号 函数名甚至是指令地址。

常用的如下l ist l inenum显示指定行数附近的代码。l ist function显示指定函数附近的代码。l ist addr显示指定地址附近的代码。

CloudCone月付$48,MC机房可小时付费

CloudCone商家在前面的文章中也有多次介绍,他们家的VPS主机还是蛮有特点的,和我们熟悉的DO、Linode、VuLTR商家很相似可以采用小时时间计费,如果我们不满意且不需要可以删除机器,这样就不扣费,如果希望用的时候再开通。唯独比较吐槽的就是他们家的产品太过于单一,一来是只有云服务器,而且是机房就唯一的MC机房。CloudCone 这次四周年促销活动期间,商家有新增独立服务器业务。同样的C...

半月湾($59.99/年),升级带宽至200M起步 三网CN2 GIA线路

在前面的文章中就有介绍到半月湾Half Moon Bay Cloud服务商有提供洛杉矶DC5数据中心云服务器,这个堪比我们可能熟悉的某服务商,如果我们有用过的话会发现这个服务商的价格比较贵,而且一直缺货。这里,于是半月湾服务商看到机会来了,于是有新增同机房的CN2 GIA优化线路。在之前的文章中介绍到Half Moon Bay Cloud DC5机房且进行过测评。这次的变化是从原来基础的年付49....

Buyvm:VPS/块存储补货1Gbps不限流量/$2起/月

BuyVM测评,BuyVM怎么样?BuyVM好不好?BuyVM,2010年成立的国外老牌稳定商家,Frantech Solutions旗下,主要提供基于KVM的VPS服务器,数据中心有拉斯维加斯、纽约、卢森堡,付费可选强大的DDOS防护(月付3美金),特色是1Gbps不限流量,稳定商家,而且卢森堡不限版权。1G或以上内存可以安装Windows 2012 64bit,无需任何费用,所有型号包括免费的...

查看源代码为你推荐
嘉兴商标注册我想注册个商标怎么注册啊?7788k.com以前有个网站是7788MP3.com后来改成KK130现在又改网站域名了。有知道现在是什么域名么?长尾关键词挖掘工具大家是怎么挖掘长尾关键词的?777k7.com怎么在这几个网站上下载图片啊www.777mu.com www.gangguan23.combbs2.99nets.com让(bbs www)*****.cn进入同一个站www.ijinshan.com在电脑看港台电视台那个网站最好而又不用钱速度又快www.884tt.com刚才找了个下电影的网站www.ttgame8.com,不过好多电影怎么都不能用QQ旋风或者是迅雷下在呢?www.zzzcn.com哪里有免费看书的网站官人放题戴望舒的《狱中题壁》b.faloo.com求本好看妖尾同人的小说,最好是后宫和完结了的。
免费域名 韩国服务器租用 国外免费vps vps优惠码 动态ip的vps wavecom 美国便宜货网站 tk域名 免费网络电视 圣诞节促销 cpanel空间 韩国名字大全 lol台服官网 绍兴电信 Updog raid10 双12 域名与空间 什么是web服务器 国内空间 更多