草庐IT

c++ - C/C++ Linux GDB API

已结束。此问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。关闭7年前。Improvethisquestion我想在Linux上制作一个GDB命令行程序的小型GUI版本,以便更轻松地调试小型C程序.可能已经存在一些,特别是在IDE中,但我想让它变得有趣并让GDB更好地了解它。现在我想知道GDB是否有API,这样我就可以直接从代码中访问GDB命令,而不必通过终端绕道而行,例如使用popen。如果GDB中不存在这样的API,那么最简单的方法是启动GDBhidden并向

c++ - GDB 可以调试 C++ lambdas 吗?

我积极使用C++11功能。我在VisualStudio2013中创建了依赖lambda来运行多个线程的程序(lambda表示任务,线程接收它必须运行的lambda实例)。Lambda在静态库中定义并链接在可执行文件中,该可执行文件从该可执行文件创建的线程调用它。当我尝试使用GDB调试此应用程序的Linux版本时,看起来GDB无法进入包含lambda的方法。它不能在这个函数中设置断点,当我尝试进入时,它甚至会进入lambda从其主体调用的方法,但是在这些方法的return之后它不会进入lambda主体,它转到lambda调用的下一个方法等。有没有办法用GDB调试lambdasbody?

c++ - 捕获异常时可以使用 gdb 进行回溯吗?

我刚刚开始使用c++异常,并且想把它弄好。我的想法是在捕获异常时生成某种回溯信息。最初我的想法类似于Call-stackforexceptionsinC++但最终发现这不太好。我也看过HowtogenerateastacktracewhenmygccC++appcrashes但不想给我当前的项目增加更多的复杂性。因为,我只需要在Debug模式下进行回溯,我希望我可以为此目的使用gdb。我的策略是在catchblock中插入断点,然后向上遍历调用堆栈以准确查明首先引发异常的原因(或导致异常的原因)?不幸的是,我似乎无法做到这一点,因为当gdb到达断点时,它会清除调用堆栈,我只能看到mai

c++ - 如何在使用 Eclipse CDT 进行调试时向 gdb 提示符输入命令?

我正在使用Eclipse(HeliosSR1)CDT进行C++开发。Eclipse与GDB接口(interface)进行调试,但我不知道如何在通过Eclipse接口(interface)进行调试时手动向GDB输入命令。例如,如果能够输入pmyVar而不必单击并滚动局部变量窗口,那就太好了。注意:我想使用Eclipse界面进行调试的唯一原因是因为我喜欢它显示正在逐步执行的代码的方式。因此,如果有人有其他建议可以让我查看正在逐步执行的代码,请提出建议!(我用过DDD,但不是特别喜欢。) 最佳答案 其实很简单。开始调试(eclipse会切

c++ - 没有用户输入的gdb回溯?

我想知道是否可以通过GDB启动应用程序,在SegFault上将回溯写入文件(稍后查看),然后在没有任何用户输入的情况下退出GDB。在从非交互式session启动操作系统时,我正在无限循环中从shell脚本运行应用程序(因此,如果它崩溃,它会重新加载)。该应用程序以不可重现的方式崩溃,因此我需要从崩溃中回溯以调试问题。理想情况下,我只需修改shell脚本以包含GDB调试+回溯功能,并保留崩溃后应用程序的自动重启。这可能吗? 最佳答案 感谢AdityaKumar;可接受的解决方案:gdb-batch-ex"run"-ex"bt"${my

c++ - 如何获得在 Mac OS X 上运行的 Homebrew 版本的 GDB?

我正在尝试使用gdb在Eclipse中调试C++程序。我认为它在我的main()函数中运行良好,但在其他地方,当我尝试查看变量的值时它会给我一个警告:FailedtoexecuteMIcommand:-data-evaluate-expressionvariableErrormessagefromdebuggerbackend:Couldnotfindtheframebasefor"Class::method()".`在网上搜索之后,我很难理解这个错误的含义或找出解决问题的方法。StackOverflow周围还有一些其他类似的问题(here和here)。由于Apple的Xcode命令行

c++ - 如何使用 gdb 达到与使用可视化调试器相同的效率水平?

我知道这有点像异端,但我根本看不出在日常调试使用(不是高级转储和日志调试)中使用gdb比可视调试器更有效。我来自.Net(爱环境恨心态)的背景,并且在过去几年中转向PHP和C++。我现在正在使用Eclipse用C++开发一个项目,并且讨厌编辑器的重量,所以我搬到了Textmate。但是调试太难受了。我正在使用gdb,但错过了可视化调试,这非常容易和高效。然而,每个人都说-学会正确使用gdb!所以我在问-我如何正确有效地使用gdb? 最佳答案 您可以将gdb与KDevelop之类的IDE一起使用。它有一个可视化界面,因此可以提供帮助。

c++ - 如何在 gdb 中将 C++ std::vector 的大小设为 "watch"?

我有一个std::vector作为类的一部分,它包含一个自定义类型。它的内容似乎从程序的某个地方神秘地改变了。我无法弄清楚这是在哪里发生的。有没有办法从gdb“观察”std::vector的内容(或大小)?谢谢。 最佳答案 Isthereawayto"watch"thecontents(orsize)ofastd::vectorfromgdb?假设您使用的是GCC,请在theVector->_M_impl._M_start和_M_finish上设置观察点。如果您正在使用其他一些std::vector实现,请进行相应调整。例子:#in

c++ - 如何打破 GDB 中类的每个方法?

我有一个令人遗憾的方法数量的类(class)。每当我进入类时,我都希望gdb中断,所以通过任何方法。有没有办法在不为每个方法单独设置断点的情况下做到这一点? 最佳答案 我自己从未尝试过,但您似乎可以尝试rbreak命令:rbreakregexSetbreakpointsonallfunctionsmatchingtheregularexpressionregex.Thiscommandsetsanunconditionalbreakpointonallmatches,printingalistofallbreakpointsitse

c++ - 如何使用 gdb 从核心文件中获取 lua 堆栈跟踪

我有一个调用lua作为脚本语言的C++应用程序(用于OSX)。我正在运行大量这些应用程序(100个)并且它们可以运行很长一段时间(几天或几周)。有时会崩溃。当它崩溃时,它会给我留下一个可爱的核心文件。我可以在gdb中打开这个核心文件并找到应用程序崩溃的位置。我可以遍历调用堆栈并找到一个lua_State变量的实例。我的问题是我想看看lua调用堆栈是什么样的这次……请记住,由于这是一个核心,我无权调用C函数,这排除了调试lua脚本的几种常用方法。我想避免通过调试钩子(Hook)添加手动跟踪,因为我担心额外的性能损失和增加的复杂性。如何遍历lua内部结构来获取调用堆栈信息?