我有一个在调试中编译的C++应用程序(使用MinGW和Qt),但我丢失了一些主要更改,因为我的团队中有人忘记在源代码控制管理器中提交他的更改,并用其他更改覆盖了源代码。当我在调试中运行程序时(在QtCreator中),我可以在main中设置一个断点,然后查看源代码。有没有一种方法可以仅使用调试二进制文件来重建所有丢失的源文件?手动或自动。谢谢! 最佳答案 WhenIruntheprogramindebug(inQtCreator)Icansetabreakpointinmainandthenseethesourcecode.真的吗?
我正在调试一个问题,我想中断每个将特定对象作为“this”参数的方法调用。这在GDB中可能吗? 最佳答案 这很容易。您可以使用像bA::aif(this==0x28ff1e)这样的命令。 关于c++-GDB在对象函数调用时中断,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7617194/
如何调试段错误?基本上是这样的:我在后台运行我的服务器:./server&然后我运行我的客户端:./client当我尝试登录我的服务器时,使用正确的用户名和密码,一切正常,但当我输入无效的用户名和密码时,会导致段错误。如何让编译器/调试器能够输出它实际看到的导致分段核心转储的错误。我知道gdb,但我尝试使用gdb客户端,但它似乎不起作用。 最佳答案 处理段错误的一个好主意是使用valgrind运行程序。用于调试。这样,您通常会获得有关导致段错误的原因的更多详细信息。例如,如果您正在读取未初始化的内存,它会告诉您。
当我在带有模板的函数内部调试时,我如何知道当前函数正在使用哪种模板类型?我试过了pT.它说gdb无法打印类型。如何中断特定模板类型?假设函数foo(...)有2种可能的形式,foo(...)和foo(...).如何设置断点以便gdb仅在第一个使用int的断点处暂停,但不是第二个使用long的?编辑:如果断点可以按行号设置就好了。这有很多很好的理由,例如。函数的初始部分可能需要很长时间才能运行,我希望调试的地方可能在if中声明等 最佳答案 要为所有实例设置断点,请使用:gdb>rbreakFoo只在已知实例上设置断点gdb>break
我的源代码file.cpp:#includeusingnamespacestd;intmain(){intx=1;inty=2;cout我使用g++-gfile.cpp编译它,然后我的launch.json文件是这样的:{"version":"0.2.0","configurations":[{"name":"(gdb)Launch","type":"cppdbg","request":"launch","program":"${workspaceFolder}/a.out","args":[],"stopAtEntry":false,"cwd":"${workspaceFolder}
(gdb)disas/mmainDumpofassemblercodeforfunctionmain():2{0x080483f4:push%ebp0x080483f5:mov%esp,%ebp0x080483f7:sub$0x10,%esp3inta=1;0x080483fa:movl$0x1,-0x4(%ebp)4intb=10;0x08048401:movl$0xa,-0x8(%ebp)5intc;6c=a+b;0x08048408:mov-0x8(%ebp),%eax0x0804840b:mov-0x4(%ebp),%edx0x0804840e:lea(%edx,%eax,1)
我正在尝试调试我在大学类(class)中用C++编写的小型操作系统。在运行时某处我的对象之一被损坏。这似乎是由于不小心写入了错误的内存地址而发生的。由于我无法从纯看代码找到发生这种情况的地方,我需要另一种方式。由于这是一个操作系统,我无法将valgrind之类的工具附加到它,但我可以在附加了gdb的模拟器(bochs/qemu)中运行它。gdb中是否有一种方法可以跟踪对类实例或更一般的特定内存范围的写访问?我想在写访问发生时立即中断,这样我就可以验证这是否有效。 最佳答案 你可以放置一个观察点:watchx当x被修改时,这将中断。x
所以我正在调试这个我从即将毕业的博士生那里继承的程序,或者在学生完成论文后发生的任何事情。无论如何,现在我有责任调试它。该程序基本上接收几个文本文件并对其进行处理。我一直遇到的问题(段错误)是因为程序试图访问尚未初始化的数组。我想知道是否有任何调试工具可以让您运行程序,并比较程序运行的两个不同路径。我想我可以手动完成该程序,但我宁愿不这样做,因为它相当大,而且我还没有掌握它。我一直在使用GDB和Valgrind(以及使用g++-wall来显示警告),这就是我走到这一步的方式。但是有没有什么软件可以让你做我上面描述的事情,或者甚至只是引导你完成你的程序。 最佳
最近我开始在我的系统上使用优秀的boost::unordered_map,但有一个缺点:我不知道如何检查它的内容。在gdb上打印它给了我一个table_和一个buckets_,但还没有找到项目在哪里。有人知道这件事吗? 最佳答案 对于那些想要打印机的人,我已经设法制造了一台。这是代码:classBoostUnorderedMapPrinter:"printsaboost::unordered_map"class_iterator:def__init__(self,fields):type_1=fields.val.type.temp
前言 调试设备代码的时候,经常碰到程序异常或者功能对不上,以前这种时候就是加打印消息,然后重新编译把程序放进去跑,通过打印消息来判断代码出问题的点在哪里,但是有的时候可能需要反复加多次才能定位到问题点,而使用gdb调试就可以很快找到问题,非常效率,虽然GDB调试的文章已经很多了,但还是想写写来记录一下。前期工作 我使用的是主机端使用gdb,设备端使用gdbserver的方式去调试,所以需要在先编译一个arm版本的gdbserver我所使用的编译器:arm-linux-gnueabihf-gccgdb源码版本:gdb-8.3编译生成的程序我已经上传到我的gitee,如