我正在使用Eclipse CDT开发一个项目,并且遇到了似乎无限循环的事情。
当从Eclipse中调试应用程序时,我可以在进程异常终止(segfault是最常见的)或者遇到断点时轻松检索和检查调用堆栈。
如果我在不知道哪些语句循环的情况下遇到无限循环,堆栈跟踪会让我大致了解要查看的函数。我怎样才能告诉Eclipse给我一个关于进程正在做什么的堆栈跟踪(没有断点或段错误)?
到目前为止我的黑客是
killall -SIGSEGV $process_name
(将$process_name
替换为您尝试调试的进程的名称)。这将导致进程表现得好像已经segfaulted,即停止它并给你一个当前正在执行的进程的调用堆栈。
是否有更清洁的方法来实现同样的目标?
答案 0 :(得分:0)
一种稍微清洁的方式是:
killall -SIGCONT $process_name
这会向进程发送CONT
(继续)信号。此信号的主要目的是在发送STOP
信号后继续进行处理。当发送到未停止的进程时,它什么都不做。
但是,如果正在Eclipse中调试该进程(后者依赖于gdb进行调试),这将停止执行并导致显示堆栈跟踪。
与-SIGSEGV
(或告知进程转储其核心或终止的其他信号)不同,您可以点击“继续”按钮继续运行您的进程。 UX接近断点后会发生的情况接近,除了Eclipse将报告暂停执行的不同原因。
请注意,如果您正在执行任何因您的流程而处理信号处理的事情,这可能无法按预期工作。
不知道是否有任何可以从Eclipse UI触发的内容。