jjzjj

binutils-gdb

全部标签

Linux--gdb的使用

文章目录release版本和Debug版本GDB一般步骤常用命令release版本和Debug版本Release版本:该版本用于发布的最终产品版本。它会进行各种优化,以提高代码的执行效率和运行速度。编译时通常会选择较高的优化级别,此外,该版本还会进行链接优化,移除未使用的代码和数据,减少可执行文件的大小。在编译时,通常会禁用调试符号的生成,以减少文件大小和保护源代码。Debug版本:该版本用于调试和开发阶段的版本。它包含了调试所需的详细符号信息,可以帮助开发人员定位和修复代码中的错误。编译时通常会禁用大部分的优化选项,以便在调试过程中更好的观察和理解代码。那么gcc在编译时会产生什么模式呢?r

C++:是否需要使用相同版本的 GCC 和 GDB 进行调试

我正在使用minGW在Windows上使用C++进行开发。我目前有调试问题。我必须使用旧版本的GCC(4.4)。所以我只是想知道是否可以使用这个旧的GCC进行编译并使用新的GDB进行调试?这两者之间有什么联系?(任何有关调试器崩溃的指示也将不胜感激!我只知道我需要确保使用调试DLL) 最佳答案 GDB和GCC是独立的程序——独立的源代码库(有一些共享代码,虽然不多),通常是独立的维护者,不同的发布时间表和不同的版本号。他们确实有一些共同的文化,当然也有一些协调。GDB在向后兼容性方面相当不错。它甚至为旧版本的GCC和有时其他编译器发

c++ - 使用模板调试 C++ 代码,使用 gdb 调试 STL

这里的gdb用户如何看待其使用模板和STL调试代码的能力?您是否使用任何技巧使调试更简单?也许一些Python脚本?或者您是否满意目前gdb中的状态(版本6.x,还没有尝试过7.x)?谢谢。 最佳答案 这可能有帮助:GDBSTLSupportTools 关于c++-使用模板调试C++代码,使用gdb调试STL,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1610906/

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++ - 在运行时在 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

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++ - 在 gdb 中打印流值 - C++

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