我编译的c++项目,不算大,大约6M二进制。当我调试它并想要打印一些变量时,我输入前两个字符并按Tab键完成。然后gdb读取符号永远卡住。我怎么解决这个问题。谢谢! 最佳答案 ItypethefirsttwocharactersandpresstheTabtocomplete.Thenthegdbreadsymbolsforeverfreezing.HowcanIsolvethisproblem医生,我这样做的时候很疼。好吧,别那样做。说真的,如果你有一个非常大的二进制文件(不清楚你的6MB是否是有调试信息的大小),以及很多变量,那
我有一个用C++编写的程序,在Linux上用-g编译。当我在gdb下运行时,我可以1)setbreakpoints2)atthosebreakpoints,printoutvariables3)seethestackframe4)givenavariablethat'sastructure,printoutpartsofthestructure(i.e.howddddisplaysinformation).现在,考虑到我的程序是用“-g”编译的——我是否可以在我的程序本身中使用这种功能?即鉴于我的程序是用“-g”编译的,是否有一些std::vectorgetStackFrame();我
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。您最喜欢使用gdb调试C++程序的一些技巧是什么?对所有技巧都感兴趣,但也如何从gdb中调用对象的方法(可能是虚拟的)检查STL对象(漂亮地打印它们)防止gdb使用continue进入STL代码处理内联、线程、tcmalloc(或自定义分配器)跨不同session保留gdb命令的历史记录
这个问题在这里已经有了答案:RunanApplicationinGDBUntilanExceptionOccurs(4个答案)关闭8年前。我正在调试带有异常抛出和异常处理的代码。我希望gdb在抛出异常时立即中断,这样我就可以检查程序的状态和调用堆栈。抛出任何异常时如何让gdb中断?
当尝试使用程序运行gdb时,它会在读取符号时出现错误。当我运行时:gdb/home/user/path/to/program.exe我得到:GNUgdb(Ubuntu7.7-0ubuntu3.1)7.7Copyright(C)2014FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisfreesoftware:youarefreetochangeandredistributeit.ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopying"a
我使用boost::mpl::string广泛的类型......足以真正帮助调试以在gdb中漂亮地打印类型.所以...而不是gdb像当前一样显示单个(多字rune字)组件...boost::mpl::string它会显示等效的字符串值而不是...boost::mpl::string我看过gdbgdb中用于pretty-printSTL容器的宏和python脚本,但我找不到一个pretty-printboost::mpl字符串。有人可以帮忙吗?更新:我已经添加了一个+100赏金......我正在寻找一种解决方案,它利用最新的GDB支持通过python进行pretty-print(如对ST
我们都知道内联函数会使调试变得更加棘手,因为它们可以从堆栈跟踪等中删除。但是假设我想从gdb中调用一个内联函数,并且我知道它的名称和参数。我认为我应该能够做到这一点,但我明白了:Cannotevaluatefunction--maybeinlined我用nm列出了我正在使用的共享库中的符号,发现我要调用的函数不在里面。没什么大惊喜。我想要的是一种生成这些内联函数的可见定义的方法。我可以访问当前包含内联定义的头文件,但我无法真正修改这些头文件。也许有某种方法可以告诉编译器发出它在翻译单元中看到的所有内联函数的定义?或者其他一些可以更轻松地在gdb中调用和检查内联函数结果的技巧?我在Lin
让我们从描述发生的事情开始:我正在Windows上使用SDL2库。我可以使用它编译程序,当我运行.exe时,它工作得很好。当我尝试使用GDB调试它时出现问题-当代码进入SDL_Init或SDL_OpenAudio函数(可能创建新线程)时,GDB停止,显示“程序收到信号?,未知信号”消息,当我恢复执行时程序崩溃。显然GDB(https://www.mail-archive.com/cygwin@cygwin.com/msg149735.html)中存在与线程命名相关的错误,应该在GDB版本7.11.1-1中修复。起初我使用GCC5.1.0(TDM)和GDB7.6.1,所以我决定更新到
一、简介通过gdb调试我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低效的代码,程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。本文将主要介绍linux下的gdb调试工具常用的命令和具体的使用实例。二、调试过程介绍2.1编译程序加参数时生成调试信息-g和-ggdb都是令gcc生成调试信息,但是它们也是有区别的选项解析g该选项可以利用操作系统的“原生格式(nativeformat)”生成调试信息。GDB可以直接利用这个信息,其它调试器也可以使用这个调试信息ggdb使GCC为GDB生成专用的更为丰
我正在调试一个问题,我想中断每个将特定对象作为“this”参数的方法调用。这在GDB中可能吗? 最佳答案 这很容易。您可以使用像bA::aif(this==0x28ff1e)这样的命令。 关于c++-GDB在对象函数调用时中断,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7617194/