GDB
文章平均质量分 79
loongknown
凡是过往,皆为序章。
展开
-
gdb调试小技巧:设置数组、容器和字符串元素的打印个数
gdb调试小技巧:设置数组、容器和字符串元素的打印个数在使用gdb调试的时候,遇到打印数组(array)、容器(vector)和字符串(string)等遇到元素打印不全的问题:gdb默认只会打印200个元素,我们当然可以通过下面的方法继续打印剩余元素:p array[index]@num但更直接的方法是修改默认的打印元素个数:如果我们想修改打印更多或者全部元素个数,可以通过 “set print elements number-of-elements”、"set print elements原创 2023-02-18 08:47:47 · 1711 阅读 · 0 评论 -
共享库的加载时重定位和位置无关代码(Load-time Relocation and Position Independent Code of Shared Libraries)
介绍加载时重定位和位置无关代码。关键词为 PIC、PLT、GOT 和 延迟绑定。原创 2022-09-17 09:33:41 · 4494 阅读 · 1 评论 -
cuda-gdb 支持内置变量的实现机制
cuda-gdb 处理内置变量的方案。原创 2022-09-03 09:54:57 · 3172 阅读 · 0 评论 -
GDB 源码分析系列文章五:动态库延迟断点实现机制
如果可执行程序使用动态链接生成,gdb刚启动时,若断点打在动态库的符号上,因为动态库还未加载,gdb会提示该符号找不到,并请求是否设置pending断点,这种断点即为延迟断点。若该符号在动态库中存在,调试过程中会命中该断点。本文结合gdb源码,分析gdb动态库延迟断点的实现机制。另外,对于gdb的事件循环机制和符号表相关实现机制可以参考往期系列博客,本文提到相关内容时不再赘述。............原创 2022-07-30 10:41:15 · 4506 阅读 · 2 评论 -
gdb 调试技巧:定位程序卡死问题
程序卡住不退处,当然我这里的例子使用ctrl-c信号可以让程序退出,而我实际的程序是这里会卡死。不过这不是重点,重点是怎么知道程序卡死(或卡住)在哪里呢?当然这个简单的例子,你直接review代码就能看出,或者简单加几个printf就能定位出卡死的位置。遇到程序卡死不退处,可能不知道卡死在什么地方,如果程序非常简单,也许printf大法就可以很快定位。但是对于大型程序,尤其是一些框架程序,printf大法可能就力不从心了。最近遇到一个程序卡死的问题,借助gdb轻松定位,供大家参考。...原创 2022-07-16 09:50:35 · 8783 阅读 · 1 评论 -
GDB 源码分析系列文章四:gdb 事件处理异步模式分析 ---- 以 ctrl-c 信号为例
gdb 处理的事件主要包括用户事件和目标程序事件。事件的处理可以分为同步模式和异步模式。本文介绍 gdb 事件处理的异步模式,并以 gdb 调试过程中 ctrl-c 信号为例展开介绍,其他信号事件的处理也是类似的。gdb 调试目标程序时,如果目标程序正在运行,此时你输入 ctrl-c 信号,gdb 将暂停目标程序。本文将结合 gdb 源码分析一下 gdb 如何处理 ctrl-c 信号。在前面的文章中,我们比较详细地介绍了 gdb 的事件循环机制,这里我们做下简单的前情回顾。gdb 在完成初始化后,即进入事件原创 2022-07-09 22:18:31 · 3908 阅读 · 5 评论 -
GDB 源码分析系列文章三:调试信息的处理、符号表的创建和使用
GDB 源码分析系列文章三:调试信息的处理、符号表的创建和使用调试信息和符号表原创 2022-05-28 09:55:04 · 7919 阅读 · 5 评论 -
GDB 源码分析系列文章二:gdb 主流程 Event Loop 事件处理逻辑详解
GDB 源码分析系列文章二:gdb 主流程 Event Loop 事件处理详解。原创 2022-05-08 00:08:29 · 5095 阅读 · 3 评论 -
GDB 源码分析系列文章一:ptrace 系统调用和事件循环(Event Loop)
关于 gdb 内部实现介绍的文章非常少,本人计划通过阅读 gdb 源码,推出系列文章介绍 gdb 内部实现的机制,以窥视 gdb 内部是如何控制和调试程序的。原创 2022-05-04 07:45:52 · 6985 阅读 · 6 评论 -
GNU 工具链调试信息分离和挂载:支持 GDB 调试 RELEASE 版本程序
GNU调试信息分离&GDB加载调试信息一般地,release版本的程序都不带调试信息,无法使用gdb调试。GNU 编译工具链和二进制工具链做法如下:gcc/g++ 使用 -g 编译得到目标程序:gcc hello.c -gobjcopy 复制目标程序中的调试信息:objcopy --only-keep-debug a.out a.debugstrip 去除目标程序中的调试信息: strip --strip-unneeded --strip-debug a.outgdb 调试目标程序时加原创 2022-04-23 08:05:34 · 5312 阅读 · 0 评论 -
栈帧 stack frame
函数调用栈帧复习和验证原创 2022-02-15 13:05:26 · 2699 阅读 · 2 评论 -
调试信息(debugging information)——解析DWARF文件
gdb调试信息和dwarf文件简单解析原创 2022-01-21 14:55:38 · 9297 阅读 · 1 评论