使用 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 触发。
我正在使用 Eclipse 开发一个项目CDT,我遇到了一个似乎是无限循环的问题。
在 Eclipse 中调试应用程序时,当进程异常终止(段错误是最常见的一种)或遇到断点时,我可以轻松地检索和检查调用堆栈。
如果我 运行 在不知道哪些语句正在循环的情况下进入无限循环,堆栈跟踪可以让我大致了解要查看的函数。我如何告诉 Eclipse 为我获取进程当前正在执行的任何操作的堆栈跟踪(在没有断点或段错误的情况下)?
到目前为止我的技巧是
killall -SIGSEGV $process_name
(将 $process_name
替换为您尝试调试的进程的名称)。这将导致进程表现得好像发生了段错误,即停止它并为您提供该进程当时正在执行的调用堆栈。
是否有更简洁的方法来实现同样的目标?
一个更简洁的方法是:
killall -SIGCONT $process_name
这会向进程发送一个 CONT
(继续)信号。此信号的主要目的是在发送 STOP
信号后继续进程。当发送到未停止的进程时,它什么都不做。
但是,如果进程正在 Eclipse 中调试(反过来依赖 gdb 进行调试),这将停止执行并导致显示堆栈跟踪。
与 -SIGSEGV
(或告诉进程转储其核心或终止的其他信号)不同,您随后可以点击“恢复”按钮并继续 运行 您的进程。 UX 接近于遇到断点后发生的情况,只是 Eclipse 将报告暂停执行的不同原因。
请注意,如果您正在做任何干扰进程信号处理的事情,这可能无法按预期工作。
不知道是否有任何东西可以从 Eclipse UI 触发。