通常,要从C++程序执行的一开始就进入步进模式,可以在GDB中使用breakmain命令。但这只会在main()函数的入口处中断程序。如何在用户编写的第一个操作(例如,静态定义类实例的构造函数)上中断程序?例如,如果我有以下代码,我如何在不使用break5命令的情况下在A()处中断?#includestructA{A(){std::cout实际上,我调试的是别人写的非常大的代码。该代码有很多分散在不同源文件中的静态类实例。在每个构造函数上手动设置断点是不可行的。 最佳答案 您可以在构造函数中定义一个断点。(gdb)break'A::
调试使用(C或C++)的程序时,gdb将复数显示为_M_value=xxx+yyy*I(类型为复双数).调试时,我需要打印该数字乘以一个因数。以下不起作用:printa*8.0我得到Argumenttoarithmeticoperationnotanumberorboolean。此外,我无法访问实部和虚部,因此我可以编写一个gdb宏来执行上述操作。我目前的解决方案是编写一个C函数来处理复杂的值和数组,并从gdb调用该函数。不知何故,这感觉不对。 最佳答案 如果您使用标准的C++复杂模板,那么complex::real()和compl
我的程序是用-g标志编译的。我遇到以下问题:1)我在头文件中的函数中设置了一个断点。断点有效。现在,当我向上两层时,它应该将我带到一个C文件(Sizer.C:505)。确实如此,但我收到了大量警告:warning:(Internalerror:pc0xff6323inreadinpsymtab,butnotinsymtab.)warning:(Internalerror:pc0xff6324inreadinpsymtab,butnotinsymtab.)warning:(Internalerror:pc0xff6323inreadinpsymtab,butnotinsymtab.)wa
我有一个看起来像这样的类:namespacemadoka{classpolarizable_sites{public:voidresize(constsize_tdim_);voidclear(void);};}在gdb中,我可以通过以下方式设置断点清除b'madoka::polarizable_sites::clear()'然而,对于成员函数resize,一个b'madoka::polarizable_sites::resize(constsize_t)'不起作用。GDB报错:theclassmadoka::polarizable_sitesdoesnothaveanymethodn
我正在尝试在ARM上使用gdbserver调试软件以获得崩溃的回溯。不幸的是我只得到问号。我到处都读到这个问题只是与缺少符号有关,但符号并没有从我的库中删除。如果我尝试使用文件命令在客户端加载符号,我得到:readingsymbolsfrom/libQtWebKit.so.4.7.2...(nodebuggingsymbolsfound)...done.然后,当崩溃发生时:ProgramreceivedsignalSIGSEGV,Segmentationfault.0x00000000in??()(gdb)bt#00x00000000in??()#10x4bf38b88in??()Ba
我在github.com/RainerKuemmerle/g2o编译了c++代码库添加后使用cmakeset(CMAKE_BUILD_TYPEDebug)以便能够调试应用程序。然后它创建了一个名为“g2o”的构建文件。但是当我尝试使用gdb进行调试时,这是我得到的输出。user2@arm_machine:~/g2o/trunk/bin$gdbg2oGNUgdb(Ubuntu/Linaro7.4-2012.04-0ubuntu2.1)7.4-2012.04Copyright(C)2012FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLvers
我有一个关于在Linux中调试正在运行的C++程序的问题。如果一个程序已经在运行并且不能被中断,那该怎么做。我可以找到三种方法,但我不太了解细节,如果有人能更深入地阐述,我将不胜感激。1)我们可以通过指定进程ID来使用GDBgdb-pPID在这种情况下,这和attachPID有什么区别?2)我们可以使用pstat,但是,我使用的是Ubuntu,没有pstat,只有mpstatmpstat好像没有提供太多信息,也没有那么多选项。3)查看./proc目录下的详细信息在这种情况下,只需转到具有PID的目录即可。但是,这应该手动完成吗? 最佳答案
文章目录release版本和Debug版本GDB一般步骤常用命令release版本和Debug版本Release版本:该版本用于发布的最终产品版本。它会进行各种优化,以提高代码的执行效率和运行速度。编译时通常会选择较高的优化级别,此外,该版本还会进行链接优化,移除未使用的代码和数据,减少可执行文件的大小。在编译时,通常会禁用调试符号的生成,以减少文件大小和保护源代码。Debug版本:该版本用于调试和开发阶段的版本。它包含了调试所需的详细符号信息,可以帮助开发人员定位和修复代码中的错误。编译时通常会禁用大部分的优化选项,以便在调试过程中更好的观察和理解代码。那么gcc在编译时会产生什么模式呢?r
我正在使用minGW在Windows上使用C++进行开发。我目前有调试问题。我必须使用旧版本的GCC(4.4)。所以我只是想知道是否可以使用这个旧的GCC进行编译并使用新的GDB进行调试?这两者之间有什么联系?(任何有关调试器崩溃的指示也将不胜感激!我只知道我需要确保使用调试DLL) 最佳答案 GDB和GCC是独立的程序——独立的源代码库(有一些共享代码,虽然不多),通常是独立的维护者,不同的发布时间表和不同的版本号。他们确实有一些共同的文化,当然也有一些协调。GDB在向后兼容性方面相当不错。它甚至为旧版本的GCC和有时其他编译器发
这里的gdb用户如何看待其使用模板和STL调试代码的能力?您是否使用任何技巧使调试更简单?也许一些Python脚本?或者您是否满意目前gdb中的状态(版本6.x,还没有尝试过7.x)?谢谢。 最佳答案 这可能有帮助:GDBSTLSupportTools 关于c++-使用模板调试C++代码,使用gdb调试STL,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1610906/