使用Eclipse CDT

时间:2018-05-29 20:33:06

标签: eclipse debugging eclipse-cdt infinite-loop

我正在使用Eclipse CDT开发一个项目,并且遇到了似乎无限循环的事情。

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

如果我在不知道哪些语句循环的情况下遇到无限循环,堆栈跟踪会让我大致了解要查看的函数。我怎样才能告诉Eclipse给我一个关于进程正在做什么的堆栈跟踪(没有断点或段错误)?

到目前为止我的黑客是

killall -SIGSEGV $process_name

(将$process_name替换为您尝试调试的进程的名称)。这将导致进程表现得好像已经segfaulted,即停止它并给你一个当前正在执行的进程的调用堆栈。

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

1 个答案:

答案 0 :(得分:0)

一种稍微清洁的方式是:

killall -SIGCONT $process_name

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

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

-SIGSEGV(或告知进程转储其核心或终止的其他信号)不同,您可以点击“继续”按钮继续运行您的进程。 UX接近断点后会发生的情况接近,除了Eclipse将报告暂停执行的不同原因。

请注意,如果您正在执行任何因您的流程而处理信号处理的事情,这可能无法按预期工作。

不知道是否有任何可以从Eclipse UI触发的内容。