我想知道是否可以通过GDB启动应用程序,在SegFault上将回溯写入文件(稍后查看),然后在没有任何用户输入的情况下退出GDB。在从非交互式session启动操作系统时,我正在无限循环中从shell脚本运行应用程序(因此,如果它崩溃,它会重新加载)。该应用程序以不可重现的方式崩溃,因此我需要从崩溃中回溯以调试问题。理想情况下,我只需修改shell脚本以包含GDB调试+回溯功能,并保留崩溃后应用程序的自动重启。这可能吗? 最佳答案 感谢AdityaKumar;可接受的解决方案:gdb-batch-ex"run"-ex"bt"${my
我正在尝试使用gdb在Eclipse中调试C++程序。我认为它在我的main()函数中运行良好,但在其他地方,当我尝试查看变量的值时它会给我一个警告:FailedtoexecuteMIcommand:-data-evaluate-expressionvariableErrormessagefromdebuggerbackend:Couldnotfindtheframebasefor"Class::method()".`在网上搜索之后,我很难理解这个错误的含义或找出解决问题的方法。StackOverflow周围还有一些其他类似的问题(here和here)。由于Apple的Xcode命令行
我知道这有点像异端,但我根本看不出在日常调试使用(不是高级转储和日志调试)中使用gdb比可视调试器更有效。我来自.Net(爱环境恨心态)的背景,并且在过去几年中转向PHP和C++。我现在正在使用Eclipse用C++开发一个项目,并且讨厌编辑器的重量,所以我搬到了Textmate。但是调试太难受了。我正在使用gdb,但错过了可视化调试,这非常容易和高效。然而,每个人都说-学会正确使用gdb!所以我在问-我如何正确有效地使用gdb? 最佳答案 您可以将gdb与KDevelop之类的IDE一起使用。它有一个可视化界面,因此可以提供帮助。
我有一个std::vector作为类的一部分,它包含一个自定义类型。它的内容似乎从程序的某个地方神秘地改变了。我无法弄清楚这是在哪里发生的。有没有办法从gdb“观察”std::vector的内容(或大小)?谢谢。 最佳答案 Isthereawayto"watch"thecontents(orsize)ofastd::vectorfromgdb?假设您使用的是GCC,请在theVector->_M_impl._M_start和_M_finish上设置观察点。如果您正在使用其他一些std::vector实现,请进行相应调整。例子:#in
我有一个令人遗憾的方法数量的类(class)。每当我进入类时,我都希望gdb中断,所以通过任何方法。有没有办法在不为每个方法单独设置断点的情况下做到这一点? 最佳答案 我自己从未尝试过,但您似乎可以尝试rbreak命令:rbreakregexSetbreakpointsonallfunctionsmatchingtheregularexpressionregex.Thiscommandsetsanunconditionalbreakpointonallmatches,printingalistofallbreakpointsitse
我有一个调用lua作为脚本语言的C++应用程序(用于OSX)。我正在运行大量这些应用程序(100个)并且它们可以运行很长一段时间(几天或几周)。有时会崩溃。当它崩溃时,它会给我留下一个可爱的核心文件。我可以在gdb中打开这个核心文件并找到应用程序崩溃的位置。我可以遍历调用堆栈并找到一个lua_State变量的实例。我的问题是我想看看lua调用堆栈是什么样的这次……请记住,由于这是一个核心,我无权调用C函数,这排除了调试lua脚本的几种常用方法。我想避免通过调试钩子(Hook)添加手动跟踪,因为我担心额外的性能损失和增加的复杂性。如何遍历lua内部结构来获取调用堆栈信息?
我有一个C++函数,它在不同的地方有许多返回语句。如何在函数实际返回的return语句处设置断点?不带参数的“break”命令是什么意思? 最佳答案 与到目前为止的答案相反,大多数编译器都会创建一条返回汇编指令,无论函数中有多少return语句(编译器这样做很方便,所以有只有一个地方来执行所有的堆栈帧清理)。如果您想停止该指令,您所要做的就是disas并查找retq(或任何处理器的返回指令),然后在上面设置断点。例如:intfoo(intx){switch(x){case1:return2;case2:return3;default
在我的Node/Express/React应用程序的每次页面加载时,Chrome开发工具控制台中都会出现以下错误:Uncheckedruntime.lastError:Couldnotestablishconnection.Receivingenddoesnotexist此错误引用了localhost/:1。当我将鼠标悬停在它上面时,它会显示http://localhost:3000/,这是我在浏览器中查看应用程序的地址。有人知道发生了什么吗?我发现的大多数其他引发此错误的线程似乎都与尝试开发Chrome扩展程序的人有关,即便如此,他们往往也很少得到响应。
有没有区别:nvidia-docker运行和dockerrun--runtime=nvidia?在officialdocs他们使用后者,但我在其他在线教程中看到过前者。 最佳答案 dockerrun--runtime=nvidia仅在nvidia-dockerv2之后可用。这两个命令都与nvidia-dockerv2等价,前者是为backwardcompatibility提供的脚本使用nvidia-dockerv1。 关于docker-nvidia-dockerrun与dockerrun
我刚刚开始使用docker。我已经安装了alpine图像来测试docker工作流,但是在运行之后dockerrunalpinels-l我收到以下错误Errorresponsefromdaemon:ociruntimeerror:container_linux.go:262:startingcontainerprocesscaused"exec:\"ls-l\":executablefilenotfoundin$PATH".我在Windows10中安装了DockerDesktopforWindows。 最佳答案 dockerrun的最