首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GDB调试指南-源码查看

前言 我们在调试过程中难免要对照源码进行查看,如果已经开始了调试,而查看源码或者编辑源码却要另外打开一个窗口,那未免显得太麻烦。文本将会介绍如何在GDB调试模式下查看源码或对源码进行编辑。...) 指定源码路径 在查看源码之前,首先要确保我们的程序能够关联到源码,一般来说,我们在自己的机器上加上-g参数编译完之后,使用gdb都能查看到源码,但是如果出现下面的情况呢?...(gdb) 它就会提示找不到源码文件了,那么怎么办呢? 我们可以使用dir命名指定源码路径,例如: (gdb) dir ....调试模式下进行编辑源码了,使用命令edit location,例如: (gdb)edit 3 #编辑第三行 (gdb)edit printNum #编辑printNum函数 (gdb)edit test.c...GDB-TUI 但是本文不作介绍,有兴趣的可以探索一下。 总结 本文介绍了GDB调试中的源码查看,源码编辑以及如何在GDB调试模式下执行shell命令。

2K40
您找到你想要的搜索结果了吗?
是的
没有找到

gdb分析core文件找不到源码

GDB源代码查找路径 在gdb程序的时候,有时候会发现源代码文件找不到 这个时候有两种选择: 1 显示绝对路径并找不到文件 如果gdb这个时候告诉你找不到这个带调试信息库的源文件路径,此时给出的路径地址是绝对路径...,比如 /home/xxx/dev/aaa/bbb/ccc.c: 没有那个文件或目录 这种提示的,你就应该用gdb提供的 set substitute-path 这个其实很好理解,就是替换规则,你如果想查看当前的替换规则...a.cpp 没有那个文件或目录 那么此时你可以用dir dirName来指定,也就是说如果我们此时的a.cpp不在当前目录下,而是在当前目录下的bak文件夹下,我们只要 dir bak 这个时候我们的gdb...注意两者的差别,对于绝对路径来说,你需要给出替换规则给他做字符串替换,对于相对路径来说,你需要给他目录来让他做拼接,也有点prefix的意思,这里的prefix由你给出,但相对路径整体结构由gdb给出,

1.6K10

GDB 调试 libvirt 源码之 domblkinfo 命令源码跟踪记

Allocation: 2.000 GiB Physical: 2.000 GiB 显然是有问题的,正常的数值三个应该不通,进入系统查看磁盘使用率也仅有 2% 左右,因此试图通过检查源码的方式查看是否正确...Ssl Aug26 5:22 /usr/sbin/libvirtd --timeout 120 使用 GDB 开始跟踪他: gdb libvirtd 1907 首先在源码中全局搜索 domblkinfo...分析源码找到获取信息的函数 src/libvirt-domain.c -> virDomainGetBlockInfo : if (virDomainGetBlockInfo(dom, device,...,接下来查看源码, entry->wr_highest_offset 的值应该是在这里被赋予的: if (qemuDomainBlocksStatsGather(driver, vm, path, true...最终得到一张 libvirt 查询磁盘使用情况的调用栈示意图: 如果继续探索,可能就需要去跟踪 QEMU 源码了,下篇文章见。

35030

GDB 调试 QEMU 源码跟踪 QMP 协议执行

接上文,通过跟踪 libvirt 的源码,找到 virsh domblkinfo 最终是使用 QMP 协议从 QEMU 获取到关键字为 query-block 的数据,其中带有 wr_highest_offset...环境准备# QEMU 4.0 Centos 鲲鹏 ARM 首先需要编译 QEMU 加入函数表,重新编译 QEMU在其中加入该字段即可,编译方法可以参考源码目录: ....开始跟踪: gdb qemu-system-aarch64 2185346 在之前找到的目标函数处打上断点: (gdb) b bdrv_query_bds_stats 之后 c 继续执行,尝试查询一下磁盘状态...->wr_highest_offset $3 = 3072 下面主要就是跟着源码来看了,本文主要是讲了如何使用 GDB 跟踪 QEMU 源码,若有疑问欢迎留言。...参考文献# GDB调试qemu源码纪录 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

23040

GDB 调试

本文链接:https://blog.csdn.net/weixin_40313634/article/details/88619906 实验楼值GDB常用命令实战课程学习记录 1....安装工具: sudo apt-get install gdb 2. 编译可调式程序: gcc bugging.c -o bugging -g -m32 -o: 生成的可执行文件的名字。...-g: 生成的程序允许gdb 调试。 -m32:生成32位的程序。默认,程序位数和OS位数相同。 编译32位程序时报错:fatal error: sys/cdefs.h: 没有那个文件或目录。...调试: 开始调试:gdb bugging 结束调试:quit 断点在循环中时: enable once Num // 断点hit 一次后,失效。...打印当前函数的所有局部变量的值: info locals 命令 简写 说明 list l 查看附近源码 next n 执行下一步 step s 一次执行一行,遇到函数会进入 break b 设置断点

1.5K30

GDB调试技巧】提高gdb的调试效率

gdb的启动 准备内容 一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。...gdb program core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。...gdb program 1234 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。...GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb的help查看。 gdb技巧 1. gdb小技巧汇总 gdb技巧挺多的,比如说直接回车是继续执行上一次的代码 巧用tab补全 1....比如输入b连续按下两次tab,可以查看gdb的所有b开头的gdb指令 2.

7410

GDB调试学习

gdb调试 能进行GDB调试,一般在编译过程中,需使用-g参数。如果不使用-g参数,则在gdb调试过程中,将不能得到程序的函数名、变量名等信息,而只能看见运行时内存地址。...q:退出gdb调试环境。 help [命令名称]:gdb帮助命令,提供对GDB各种命令的解释说明。...如果指定了“命令名称”参数,则显示该命令的详细说明;若果没有指定参数,则分类显示所有GDB命令,共用户进一步浏览和查询。 cd dir:运行GDB,使用dir作为gdb的工作目录。...l:l相当于list,从第一行开始列出源码。...gdb filename // 其中filename为可执行文件名 gdb filename core // core是程序core dump产生的文件,产生core文件,需设置栈大小无线使用ulimit

1.3K20

GDB高级技巧

GDB高级技巧 yijian 2009-2-22 难得有雅兴,边动手边记录操作步骤,本文主要示例一些平常较少使用到的GDB功能,掌握这些用法有助于提高GDB调试和解决问题的能力。...1) 查看宏 默认情况下,在GDB中是不能查看宏的值及定义的,但通过如下方法,则可以达到目的: 编译源代码时,加上“-g3 -gdwarf-2”选项,请注意不是“-g”,必须为“-g3”,查看宏的值使用命令...使用“rb”命令,如果执行“rb”时不带参数,则表示在所有函数处打一个断点,“rb”后面可以接一个符合正则表达式的参数,用来对符合正则表达式的所有函数打断点 4) .gdbinit文件 GDB在启动时...如果想在命令执行完,再执行某个或某些命令,则: #define hookpost-print echo ----------\n end 7) GDB中循环 GDB支持if/else/while.../loop_break/loop_continue,如: (gdb) set $x=1 (gdb) while $x==1  >p $x  >set $x=0  >p $x  >end -

1.4K10

gdb 基础命令

命令 解释 示例 file 加载被调试的可执行文件 如果执行gdb与被调试的程序不在同个目录,则需要带上路径 (gdb) file gdb_sample l List 的缩写,打印源码...在gcc/g++ 编译程序时,需要加上-g 选项 (gdb) l 1 r Run 的缩写,运行程序 (gdb) r c Continue 的缩写,继续执行程序,直到下一个断点或程序结束 (gdb...(gdb) n p Print 的缩写, 打印变量的值 (gdb) p i bt Backtrace 的缩写,查看堆栈信息 (gdb) bt q Quit 的缩写,退出gdb 调试环境...月 9 17:19 gdb_sample 可以用 gdb gdb_sample 直接进入调试环境,也可以先启动gdb,再打开可执行文件: GNU gdb (GDB) Red Hat Enterprise...(gdb) 上面表示可执行文件已经加载成功,(gdb) 是gdb内部命令引导符,等待用户输入命令 下面使用l 命令来查看源码,可以指定行号,回车可以继续往下查看: (gdb) l 1 1

1.1K220
领券