草庐IT

c++ - GDB 的奇怪行为

我一直在尝试调试一个小东西,并且在尝试这样做时差点发疯。经过几个小时的解决问题,我终于有了一段代码,它是我问题的根源:#include#include#includeusingnamespacestd;intmain(){std::vectorfoo=std::vector();foo.push_back(0);foo.push_back(11);foo.push_back(222);foo.push_back(3333);std::stackbar=std::stack();cout编译后,使用:g++-std=c++11-ggdb-O0-pedantic-Wall-Wextra-W

c++ - 使用制表符完成打印变量时 gdb 卡住

我编译的c++项目,不算大,大约6M二进制。当我调试它并想要打印一些变量时,我输入前两个字符并按Tab键完成。然后gdb读取符号永远卡住。我怎么解决这个问题。谢谢! 最佳答案 ItypethefirsttwocharactersandpresstheTabtocomplete.Thenthegdbreadsymbolsforeverfreezing.HowcanIsolvethisproblem医生,我这样做的时候很疼。好吧,别那样做。说真的,如果你有一个非常大的二进制文件(不清楚你的6MB是否是有调试信息的大小),以及很多变量,那

c++ - Android NDK pretty-print

我正在使用AndroidNDK和Eclipse+CDT,在OSX上运行。我希望能够调试STD库的内容。我看过一些关于使用Python脚本启用这种“pretty-print”的教程。问题是它们都使用默认的gdb,而不是AndroidNDK提供的gdb,所以它们对我来说都失败了。如何使用AndroidNDK调试STD库? 最佳答案 如果您只需要调试,而不是让一些已经选择的工具工作,我可以分享这段代码:dlog.h:#include#defineLOGD(...)__android_log_print(ANDROID_LOG_DEBUG,

c++ - 访问 gdb 在 C++ 中看到的程序信息

我有一个用C++编写的程序,在Linux上用-g编译。当我在gdb下运行时,我可以1)setbreakpoints2)atthosebreakpoints,printoutvariables3)seethestackframe4)givenavariablethat'sastructure,printoutpartsofthestructure(i.e.howddddisplaysinformation).现在,考虑到我的程序是用“-g”编译的——我是否可以在我的程序本身中使用这种功能?即鉴于我的程序是用“-g”编译的,是否有一些std::vectorgetStackFrame();我

使用 gdb 的 C++ 特定调试技巧

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。您最喜欢使用gdb调试C++程序的一些技巧是什么?对所有技巧都感兴趣,但也如何从gdb中调用对象的方法(可能是虚拟的)检查STL对象(漂亮地打印它们)防止gdb使用continue进入STL代码处理内联、线程、tcmalloc(或自定义分配器)跨不同session保留gdb命令的历史记录

c++ - 可以将 gdb 设置为在任何抛出时中断吗?

这个问题在这里已经有了答案:RunanApplicationinGDBUntilanExceptionOccurs(4个答案)关闭8年前。我正在调试带有异常抛出和异常处理的代码。我希望gdb在抛出异常时立即中断,这样我就可以检查程序的状态和调用堆栈。抛出任何异常时如何让gdb中断?

c++ - 读取符号时 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

c++ - Android-ndk(r7)编译.cpp文件时如何开启 "C++0X"实验标准?

在检查“android-ndk-linux_x86/sources/cxx-STL/gnu-libstdc++/include/memory”头文件时,我发现这个头文件包括其他STL头文件,根据__GXX_EXPERIMENTAL_CXX0X__旗帜。我认为这个标志与“C++0X”标准有关,这个标准在Android-ndkr7中可能还处于试验阶段。但是,我想在我的项目中启用这个C++标准。(我不确定这个“C++0X”标准是否已经默认开启)我想知道在编译Android项目的“project/jni”目录下的.cpp文件时,我应该如何告诉Android-ndk设置这个标志。或者如何在我的应

c++ - 在 gdb 中漂亮地打印 boost::mpl::string<...> 类型

我使用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

c++ - 可以在 gdb 中调用内联函数和/或使用 GCC 发出它们吗?

我们都知道内联函数会使调试变得更加棘手,因为它们可以从堆栈跟踪等中删除。但是假设我想从gdb中调用一个内联函数,并且我知道它的名称和参数。我认为我应该能够做到这一点,但我明白了:Cannotevaluatefunction--maybeinlined我用nm列出了我正在使用的共享库中的符号,发现我要调用的函数不在里面。没什么大惊喜。我想要的是一种生成这些内联函数的可见定义的方法。我可以访问当前包含内联定义的头文件,但我无法真正修改这些头文件。也许有某种方法可以告诉编译器发出它在翻译单元中看到的所有内联函数的定义?或者其他一些可以更轻松地在gdb中调用和检查内联函数结果的技巧?我在Lin