我正在调试看起来像这样的代码:while(true){//dosomething...size_ti=foo();//我想在foo()函数调用处中断,调用它几次,然后完全跳出while循环(假设我们保证标志将被设置-这样我们就可以跳出循环。如何完全跳出循环?finish简单地运行到下一次迭代。我想要做的是退出当前的“代码块”(在本例中为while循环) 最佳答案 您需要advance命令,它采用与break命令相同的参数。以您的代码为例(但添加了行号):10while(true){11//dosomething...12size_t
我想知道是否可以使用gdbprint命令评估C++模板函数的结果。在下面的代码中有一个简单的id功能,我试着printid(x)的结果,但就好像id或id从未存在过。我使用的代码如下,使用g++-std=c++11-gtest7.cpp编译:templateTid(Tx){returnx;}intmain(){inti=0;i=i+1;}在GDB中,我试图print如下:Breakpoint1,main()attest7.cpp:66i=i+1;(gdb)printi$1=0(gdb)printid(i)Nosymbol"id"incurrentcontext.(gdb)printid
在ubuntu中使用gdb进行调试时,在断点后我尝试打印一些东西。它显示.在make文件中,我更改了-O2至-O0,即使这样也会出现同样的错误。如何消除此错误并打印优化后的输出值? 最佳答案 可怕的“已优化”消息意味着编译器决定它无法告诉调试器变量所在的位置。它可能完全消失,或者它可能太复杂而无法以某种方式表示(也许是为了编译器代码内部的完整性)。您可以使用一些技巧来避免出现此消息。首先,确保启用-fvar-tracking。如果您使用的是DWARF(旁注:永远不要使用stabs),那么在优化时它应该是默认值,但确定一下也无妨。您可
当我尝试使用带有NetbeansIDE的gdb调试C/C++程序时,出现此错误(问题的标题)。有谁知道这意味着什么,以及如何消除警告?尽管有警告,我仍然可以调试,但我仍然想让警告消失。相关详情:操作系统:Ubuntu9.10gdb:7.0-ubuntuNetbeans:6.8.1 最佳答案 项目>属性>运行>控制台类型>输出窗口 关于c++-警告:GDB:Failedtosetcontrollingterminal:Operationnotpermitted,我们在StackOverfl
我能否让gdb自动加载核心文件中指定的二进制文件?给定一个核心文件我现在通常这样做:gdb-ccorefileGNUgdb6.8...Corewasgeneratedby`/path/to/binary'然后我复制粘贴并运行:gdb-ccorefile/path/to/binary这似乎是一个不必要的两步过程,但我没有看到基于手册页的明显方法。我错过了什么吗? 最佳答案 你可以编写脚本吗?#!/bin/bashgdb"`file"$1"|awk-F\''{print$2}'`""$1"
我的一个C++程序中有一个有趣的问题。显然,我的一个类的vtable在程序执行期间被/变得困惑了。在gdbsession中,我发现如果我直接调用对象的方法它会成功,但如果我使用指针或引用,我最终会进入一个完全不相关的类的析构函数,该类不会很快被实例化。没有this-指针当然会改变。假设我的观察是正确的,我如何在gdb中查看对象的vtable?我在Linux上使用gcc,我的gdb版本是GNUgdb(Ubuntu/Linaro7.3-0ubuntu2)7.3-2011.08。 最佳答案 您可以使用gcc的-fdump-class-hi
我试图让GDB显示堆栈的十六进制值,所以我使用命令x/48b$esp,这是我在Internet上看到的一个命令,应该显示堆栈上从堆栈指针指向的位置开始的48个字节的十六进制值。但是,当我执行此命令时,我得到整数值(有些是负值)。示例如下:(gdb)x/48b$esp0xbffff200:40-14-1-6524-114480xbffff208:12300000000xbffff210:16000-3-1121700xbffff218:-1864270-1-1-1-10xbffff220:884019045-91700xbffff228:3838-64-14-1-65-64-14我以前用
我有一个第三方库函数调用分散在我的可执行文件的很多地方。我的可执行文件是使用调试符号构建的,但第三方库没有调试符号,因此我无法在函数上放置断点。我想在调用库函数时放置一个断点,以检查调用堆栈。如何在我的可执行文件中对库函数调用的所有调用设置断点。 最佳答案 我认为唯一的方法是:在您的代码中找到此函数的任何调用;在该行创建一个断点;运行调试器并停在那里;在gdb中写入nexti得到第一个函数指令;获取指向该函数开头的当前eip;在eip指向的地址新建断点; 关于c++-如何在gdb中为函数
我一直在解决调试器问题,但现在它变得太烦人了。我正在处理更复杂的程序,如果我不能调试我的程序,我就无处可去。有没有其他人能够在eclipse中解决这个问题?它适用于java,但不适用于我来自minGW的C++插件C++eclipse调试器出现以下错误。“启动程序名称”遇到问题。启动命令时出错:gdb--version 最佳答案 假设您使用的是Windows并安装了MinGW,您只需在MinGWbin文件夹中找到gdb可执行文件。这可以在Eclipse的“调试器”配置中的“主”选项卡上完成:
这个问题在这里已经有了答案:Inspecttemplateparameterpackingdb(1个回答)关闭6年前。如何在gdb的可变参数函数中查看参数包的值?示例代码(VariadicDebug.cpp):templateintDo(inta,Ts...ts){//Addbreakpointhere.acanbeseenusing'printa'buthowtoshowts???returna;}intmain(intargc,char**argv){returnDo(0,"Helloworld!",88.9);}编译g++--std=c++11-O0-gVariadicDebug