草庐IT

c++ - 如何使用 GDB 打印 C++ 评估结果?

我一直在四处寻找,但无法弄清楚如何在GDB中打印出评估结果。例如,在下面的代码中:if(strcmp(current_node->word,min_node->word)>0)min_node=current_node;(上面我正在尝试一种可能的方法来检查字符串的字母顺序,但不确定它是否正确工作。)现在我可以观察min_node并查看值是否发生变化,但在涉及更多的代码中,这有时会更复杂。我想知道是否有一种简单的方法可以在当前GDB/程序流所在的线上观看测试的评估。 最佳答案 gdb中没有表达式级别的单步执行,如果这是您所要求的。您的

c++ - 如何在 gdb 中为 pretty-print 调用构造函数

在使用GDB进行调试时,我想将一个方便的变量设置为新构造的值。我正在使用Qt框架进行编程,所以我想创建一个QString,但这与问题无关,因为我想知道如何对任何类执行此操作。我试过了(gdb)set$str='QString::QString("abc")'Nosymbol"QString::QString("abc")"incurrentcontext.(gdb)set$str=QString::QString("abc")CannotresolvemethodQString::QStringtoanyoverloadedinstance(gdb)set$str=QString("a

c++ - 如何使用 CMake 在调试器中将 follow-fork-mode 设置为子模式

我有Linux系统,我使用ClionIDE编写程序,其中使用CMake。我在程序中有一部分想要调试子进程我从这个论坛上读了一些主题,但我仍然不知道如何或在哪里可以打开此功能:gdbdebuggingchildprocessafterfork(follow-fork-modechildconfigured)HowdoIdebugthechildprocessafterfork()ingdb?我刚刚尝试将标志CMAKE_CXX_FLAGS_DEBUG设置为setfollow-fork-modechild但CMake给我错误。下面的屏幕截图包含用于编译和调试我的程序的所有标志。那么我必须在什

c++ - 在运行时在 gdb 中添加函数

我正在尝试在gdb中调试一些基于STL的C++代码。代码有类似的东西intmyfunc(){std::mapm;...}现在在gdb中,在myfunc中使用“printm”给出了一些非常丑陋的东西。我看到推荐的是编译类似的东西voidprintmap(std::mapm){for(std::map::iteratorit=...){printf("%d:%d",it->first,it->second);}}然后在gdb中做(gdb)callprintmap(m)这似乎是处理问题的好方法...但是我可以将printmap放入一个单独的目标文件(甚至动态库)中,然后在运行时将其加载到gd

c++ - 如何在 gdb 中转储 STL 容器数据?

我无法在gdb中转储STL无序映射容器值。变量类型是std::unordered_mapvar;我的gdb版本-7.7.1GDB配置:configure--host=x86_64-linux-gnu--target=x86_64-linux-gnu--with-auto-load-dir=$debugdir:$datadir/auto-load--with-auto-load-safe-path=$debugdir:$datadir/auto-load--with-expat--with-gdb-datadir=/usr/local/share/gdb(relocatable)--wi

c++ - 在 gdb 中使用 [] 运算符和 unordered_map 给出未解析的运算符

我有一个C++代码,我在其中实例化一个unordered_map,然后使用cout打印它的值。这很好用。但是,当我尝试在gdb中运行它并打印unordered_map的值时,这给了我错误。下面是代码片段:std::unordered_mapmymap={{"Mars",3000},{"Saturn",60000},{"Jupiter",70000}};std::cout上面的两个cout语句都打印了键“Mars”的unordered_map值。但是,当我使用gdb然后尝试使用以下语句在键“Mars”处打印mymap的值时,出现错误。(gdb)printmymap.at("Mars")C

Android NDK 找到动态链接 : unable to debug library

我有一个项目可以很好地在android设备上编译、加载和运行。当我调用gdb服务器时,它也能正常工作。然后,当我调用gdb客户端运行断点时,消息出现:Errorwhilemappingsharedlibrarysections:/system/bin/linker:Nosuchfileordirectory.libandroid.so:Nosuchfileordirectory.liblog.so:Nosuchfileordirectory.libEGL.so:Nosuchfileordirectory.libOpenSLES.so:Nosuchfileordirectory.libG

c++ - 如何在 C++ 头文件上使用 gdb?

我试图在网上搜索这个问题,但似乎找不到解决我问题的好方法。好吧,我正在尝试使用gdb来调试我的C++程序。该程序由一个简单的main.cpp和一个model.h组成。编译命令为g++-Wall-g-cmain.cppg++-Wall-gmain.o-oOUTPUT由于几乎所有算法都存储在model.h中,因此我需要调试该头文件而不是cpp文件。但是,每当我尝试在标题上放置一个断点时tbreakmodel.h:163gdb总是给我一条消息“没有名为TNFmodel.h的源文件”。在另一个问题中breakpointsinGDB,我看到了一个解决方案,通过“dir”将包含标题的文件夹添加到库

c++ - 在运行时从应用程序读取调试信息

我有一些关于调试符号的问题,以及可以用它们做什么,除此之外,好吧,调试。我最感兴趣的是关于GCC的答案,但我也很高兴知道它在其他编译器(包括MSVC)下的样子。首先:调试符号的常见格式/类型是什么?它们与编译器和平台有什么关系?平台间的GCC和MinGW格式是否始终相同?我可以在运行时检查构建是否有它们以及它们的格式是什么?还有一些更实际的问题......我怎样才能:检查当前文件和行号?获取正在执行的(限定的)函数名?获取完整的当前堆栈跟踪?我要强调一下,我说的是运行时检查。所有这些都可以由GDB读取和pretty-print,但我不知道有多少信息来自调试符号本身,有多少信息来自GDB

c++ - 在 gdb 中打印流值 - C++

我正在尝试查看流的值(ifstream,但我猜它应该适用于所有类型的流)。示例代码可能如下所示:stringstreamin("OneTwoThreeFourFive");while(in)cout我试图通过以下方式来做到这一点,但它们似乎都不起作用:(gdb)printin(gdb)callcout...等等。有什么方法可以查看流的值吗? 最佳答案 您必须确保您拥有包含使用调试标志编译的libstdc++库的程序包。我安装了libstdc++6-8-dbg包,现在我可以在gdb中查看所有流对象数据。