考虑一个产生某些段错误并中止的C++程序。在使用gdb进行常规调试时,我可以执行以下操作并查看结果(gdb)r(gdb)pstr_var.size()其中str_var在文件中定义为std::string。但是,我在使用核心转储进行调试时遇到了一些问题。在我通过在gdb中加载核心转储之后gdbEXECUTABLEcore.pid然后在gdb终端运行以下命令(gdb)pstr_var.size()gdb说“如果没有调试过程,你就不能这样做。”我只能做bt(查看堆栈跟踪)或直接打印std::string变量之类的事情,但是找不到一种简单的方法来检查一些信息,例如打印std::string的
我最近才开始遇到这个问题,我不知道它是什么时候开始出现的/是什么原因造成的。我这里有这个简单的测试程序:#includeintmain(){return0;}但是当我尝试正常运行它时,它会创建一个堆栈转储。Stacktrace:FrameFunctionArgs00CBC4986101D93A(00000198,0000EA60,000000A4,00CBC508)00CBC5C8610E2F3F(00000000,60FC04E8,00CBC658,7794ABEE)然而,当我尝试在GDB中运行它时,它显然无法运行。gdb:unknowntargetexception0x406d13
这是我的类(class)的一个极其简化的版本:ClassMyClass{public:intsizeDesired;};我正在创建MyClass的vector主要实例:intmain(intargc,char**argv){std::vectormyvec;for(inti=0;i有一些内存损坏(我认为)错误导致我的程序崩溃。我观察到MyClass::sizeDesired的值程序崩溃时是垃圾。所以,我想在每个MyClass:sizeDesired上设置一个观察点成员,这样我就可以准确地看到这些成员的值何时发生变化。使用GDB,我该怎么做?当我在推送MyClass的所有实例后中断时在s
我有一个遗留的GDB命令脚本,用于基于Python2.6源代码附带的GDB脚本获取Python堆栈跟踪(所以不允许超链接,但这是URL:http://#%20http://svn.python.org/view/*checkout*/python/branches/release26-maint/Misc/)该脚本有一个while循环,它基于要退出的程序计数器进行相当脆弱的检查,这(如评论中的原始代码中所述)可能仅适用于直接运行Python的情况,如果解释器从C/C++应用程序中启动。现有的while循环如下所示:while$pcPy_GetArgcArgv#...#codeforex
我的理解是gdb可以监控正在运行的程序的完整状态。我可以保存在断点处暂停的gdbsession并稍后恢复session吗?我的第一次尝试只是在断点处暂停的第一个gdbsession中生成核心转储,然后使用核心转储启动第二个gdbsession。Savingcorefileingdb这导致了以下错误。ProgramterminatedwithsignalSIGTRAP,Trace/breakpointtrap.所以断点信息被插入到程序状态中,有意思。在我第二次尝试时,我做了同样的事情,但这次我在第二个session中添加了与第一个session中相同的断点。Gettinggdbtosav
我在一个长期运行的程序中有一个全局函数:inttest(){inta=12;intc=10;printf("a=%d",a);a+=c;printf("a=%d",a);returna;}我调试程序并中断,然后发出以下命令:(lldb)calltest()a=12a=22(int)$0=22(lldb)我希望它在我点击calltest()之后每一行都在test()方法中中断,而不是立即返回结果。任何人都知道该怎么做?------------------------------------下面回答------------------------------------@JasonMole
我想在gdb中打印Eigen矩阵和vector,因此我添加了扩展名来执行此操作,可在此处找到:https://bitbucket.org/eigen/eigen/src/12a658962d4e/debug/gdb/printers.py但是,当我尝试在ddd中的某些Eigen类型上调用print时,出现以下错误:PythonException'map'objectisnotsubscriptable:PythonException'map'objectisnotsubscriptable:PythonException'map'objectisnotsubscriptable:基于t
📙作者简介:RO-BERRY📗学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识📒日后方向:偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持目录1.缓冲区2)\n和\r3.进度条ProgressBar.cProgressBar.hMakefilemain.c4.认识gdbgdb是什么gdb的作用5、gdb的使用GDB安装GDB的用法1.缓冲区第一种情况执行结果如下:可以看到程序先执行printf再执行sleep第二种情况执行结果如下:在这里为什么程序先执行sleep在执行printf呢?实际上也并没有先执行sleep再执行printf,C语言执行代码是顺序结构
假设我启动了一个gdbsession,并创建了一个断点并运行。断点后,我根据当前执行的某个符号的内存地址创建观察点,并删除原来的断点。一段时间后,我使用Control-C中断程序,仍在gdb中,我发出run命令从头重新启动程序。但是,我想在调试进程重新启动时保留硬件观察点。是否有gdb设置允许我在重新运行时保留硬件观察点?更新:这是重现问题的示例。intmain(){intNeverGoOutOfScope=0;NeverGoOutOfScope=7;while(1);}下面是gdb命令的顺序。break3runwatchNeverGoOutOfScopeinfowatchrun#Af
我正在调试繁重的模板化代码,并寻找一种在回溯和打印变量时隐藏类型信息的方法。如果您可以只隐藏模板参数,那就更好了,因为它们会使回溯很难阅读。感谢您的支持。 最佳答案 最好的方法是使用gdb插件。我不知道gdb中的native设置(帧过滤器除外)可以达到预期的结果。请查看https://github.com/tromey/gdb-helpers,更具体地说https://github.com/philtweir/gdb-pretty-frame-cpp.我使用了带有自定义模板重代码的gdb-pretty-frame。