草庐IT

c++ - 如何在函数返回的 GDB 中设置断点?

我有一个C++函数,它在不同的地方有许多返回语句。如何在函数实际返回的return语句处设置断点?不带参数的“break”命令是什么意思? 最佳答案 与到目前为止的答案相反,大多数编译器都会创建一条返回汇编指令,无论函数中有多少return语句(编译器这样做很方便,所以有只有一个地方来执行所有的堆栈帧清理)。如果您想停止该指令,您所要做的就是disas并查找retq(或任何处理器的返回指令),然后在上面设置断点。例如:intfoo(intx){switch(x){case1:return2;case2:return3;default

gdb - 如何将 gdb 附加到在 docker 容器中运行的进程?

我在docker容器中有一个长时间运行的进程,我想将gdb附加到该进程以查看正在运行的线程并获取堆栈跟踪。我可以从主机附加到进程,但我无法解析任何符号,因为可执行文件位于文件系统中的不同位置(它位于docker安装的卷中)并且共享系统库都卡在docker文件系统镜像中在/var/lib/docker的某个地方。我能够生成一个核心文件并使用gdb通过指定可执行文件的主机路径来查看它,但是因为系统库都在错误的位置,并且在核心文件中加载到错误的位置,我没有从中得到任何信息。我有没有忽略的选项? 最佳答案 您可以通过lxc-attach附加

python - 如何更改 gdb 使用的 Python 解释器?

我使用的是ubuntu14.04,其中python3是默认系统包。我想用gdb调试Python2.7程序,但是我好像遇到了这个问题:当我在gdb中时,使用py命令会将我置于解释器中,因此我在解释器中运行了这些命令:首先我检查解释器版本:(gdb)py>importsys>print(sys.version)>end3.4.0(default,Apr112014,13:08:40)[GCC4.8.2]然后我检查正在使用的解释器可执行文件(gdb)py>importsys>print(sys.executable)>end/usr/bin/python(gdb)然后在bash中,我检查解释

python - 如何在 Python 中导入 'GDB'

我正在使用Python2.7和Python3.1.3。但在我的Python中,我无法“导入gdb”。这给了我一个错误:>>>importgdbTraceback(mostrecentcalllast):File"",line1,inImportError:Nomodulenamedgdb>>>这是什么原因?我该如何解决这个问题? 最佳答案 importgdb仅当您的Python代码在GDB进程中运行时才有效。它不应该在常规系统Python解释器中工作。说明GDB嵌入了Python解释器,因此它可以使用Python作为扩展语言。你不能

python - 内存转储格式为 gdb 中的 xxd

我正在尝试检查一个缓冲区,该缓冲区包含二进制格式的消息,但也包含字符串数据。例如,我正在使用这个C代码:intmain(void){charbuf[100]="\x01\x02\x03\x04StringData\xAA\xBB\xCC";return0;}我想获得buf中内容的十六进制转储,格式类似于xxd(我不在乎它是否完全匹配,什么我真正在寻找的是与可打印字符并排的十六进制转储)。在GDB中我可以使用类似的东西:(gdb)x/100bxbuf0x7fffffffdf00:0x010x020x030x040x530x740x720x690x7fffffffdf08:0x6e0x67

聊一聊 GDB 调试程序时的几个实用命令

一:背景1.讲故事用惯了宇宙第一的VisualStudio再用其他的开发工具还是有一点不习惯,不习惯在于想用的命令或者面板找不到,总的来说还是各有千秋吧,今天我们来聊一下几个在调试中比较实用的命令:查看内存硬件断点虚拟内存布局二:命令解读1.查看内存相信大家都知道VisualStudio直接提供了Memory面板来观察内存布局,但VSCode没有,还需要自己手敲命令来实现,这就比较麻烦了,为了方便先上一段测试代码。#includeusingnamespacestd;intmain(){inta=10;intb=11;intc=12;}调试器配的是GDB,只能用它的x命令观察内存,类似WinDb

Windows10下使用Msys2编译gdb源码

Windows10下使用Msys2编译gdb源码Windows10下使用Msys2编译gdb10.2源码下载msys2下载gdb源码安装msys2编译gdb-编译前准备编译gdb-正式编译解决问题重新编译Windows10下使用Msys2编译gdb10.2源码下载msys2直接搜索msys2进入官网下载,版本为msys2-x86_64-20210725.exe网址:https://www.msys2.org下载gdb源码直接搜索gdb进入官网下载,版本为gdb-10.2.tar.gz网址:http://www.gnu.org/software/gdb/安装msys21.直接安装2.安装完成后,

c++ - 我可以从地址读取/写入 gdb 中断吗?

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:CanIsetabreakpointon'memoryaccess'inGDB?我在内存中有一个特定位置正在损坏,我希望能够准确地看到写入该位置的时间。有什么方法可以让gdb中断对该特定地址的内存访问? 最佳答案 是的。使用观察点:watch-仅在写入时中断(并且仅在值更改时)rwatch-读取时中断,并且awatch-读/写中断。来自一些互联网资源的更详细的简介:观看watch是gdb设置数据断点的方式,如果指定位置的内存发生变化,它将停止程序的执行。可

c++ - 使用 gdb 在 Qt Creator 中调试时如何避免输入库的源文件?

如何配置QtCreator和/或gdb,以便在使用Qt库调试我的程序时,调试器可以避免进入Qt的源文件? 最佳答案 您需要关闭auto-solib-add。在正常的gdb提示符下,您可以输入:(gdb)setauto-solib-addoff在QtCreator中,在Options->Debugger->Gdb下,您可以指定Gdb启动脚本。创建一个包含“setauto-solib-addoff”命令的文件,然后将Gdb启动脚本设置为该文件。 关于c++-使用gdb在QtCreator中调

c++ - 如何在 gdb 中列出类方法?

我一直在谷歌上搜索并检查gdb手册,但似乎无法找到我正在尝试做的事情的答案。有没有办法让gdb打印出给定类类型的所有方法的列表?print命令似乎只显示数据成员和字段,没有显示任何方法。此外,更进一步,有没有办法打印给定基*指针的所有正确虚拟方法?比如说:structA{virtualvoidfoo(){}};structB:publicA{voidfoo(){}};intmain(){A*b=newB;}如何让gdb打印变量*b并让它显示正确的虚拟方法?谢谢 最佳答案 你可以使用ptype。假设我将这些行添加到您的示例中:Aalp