使用 Eclipse CDT 在无限循环期间获取堆栈跟踪

Get a stack trace during an infinite loop with Eclipse CDT

我正在使用 Eclipse 开发一个项目CDT,我遇到了一个似乎是无限循环的问题。

在 Eclipse 中调试应用程序时,当进程异常终止(段错误是最常见的一种)或遇到断点时,我可以轻松地检索和检查调用堆栈。

如果我 运行 在不知道哪些语句正在循环的情况下进入无限循环,堆栈跟踪可以让我大致了解要查看的函数。我如何告诉 Eclipse 为我获取进程当前正在执行的任何操作的堆栈跟踪(在没有断点或段错误的情况下)?

到目前为止我的技巧是

killall -SIGSEGV $process_name

(将 $process_name 替换为您尝试调试的进程的名称)。这将导致进程表现得好像发生了段错误,即停止它并为您提供该进程当时正在执行的调用堆栈。

是否有更简洁的方法来实现同样的目标?

一个更简洁的方法是:

killall -SIGCONT $process_name

这会向进程发送一个 CONT(继续)信号。此信号的主要目的是在发送 STOP 信号后继续进程。当发送到未停止的进程时,它什么都不做。

但是,如果进程正在 Eclipse 中调试(反过来依赖 gdb 进行调试),这将停止执行并导致显示堆栈跟踪。

-SIGSEGV(或告诉进程转储其核心或终止的其他信号)不同,您随后可以点击“恢复”按钮并继续 运行 您的进程。 UX 接近于遇到断点后发生的情况,只是 Eclipse 将报告暂停执行的不同原因。

请注意,如果您正在做任何干扰进程信号处理的事情,这可能无法按预期工作。

不知道是否有任何东西可以从 Eclipse UI 触发。