使用Eclipse CDT在无限循环期间获取堆栈跟踪
我正在使用EclipseCDT进行一个项目,遇到了一个似乎是无限循环的问题 在Eclipse中调试应用程序时,当进程异常终止(segfault是最常见的)或遇到断点时,我可以轻松地检索和检查调用堆栈 如果我在不知道哪些语句正在循环的情况下运行到无限循环中,堆栈跟踪将使我大致了解要查看的函数。我如何告诉Eclipse获取进程正在执行的任何操作的堆栈跟踪(在没有断点或segfault的情况下) 到目前为止,我对此的看法是使用Eclipse CDT在无限循环期间获取堆栈跟踪,eclipse,debugging,eclipse-cdt,infinite-loop,Eclipse,Debugging,Eclipse Cdt,Infinite Loop,我正在使用EclipseCDT进行一个项目,遇到了一个似乎是无限循环的问题 在Eclipse中调试应用程序时,当进程异常终止(segfault是最常见的)或遇到断点时,我可以轻松地检索和检查调用堆栈 如果我在不知道哪些语句正在循环的情况下运行到无限循环中,堆栈跟踪将使我大致了解要查看的函数。我如何告诉Eclipse获取进程正在执行的任何操作的堆栈跟踪(在没有断点或segfault的情况下) 到目前为止,我对此的看法是 killall -SIGSEGV $process_name (将$proc
killall -SIGSEGV $process_name
(将$process\u name
替换为您尝试调试的进程的名称)。这将导致进程的行为就像它已发生故障一样,即停止它并向您提供进程当时正在执行的任何内容的调用堆栈
有没有更干净的方法达到同样的效果?稍微干净一点的方法是:
killall -SIGCONT $process_name
这会向进程发送一个CONT
(continue)信号。此信号的主要目的是在发送了停止
信号后继续处理。当发送到未停止的进程时,它不会执行任何操作
但是,如果进程正在Eclipse中调试(Eclipse反过来依赖gdb进行调试),这将停止执行并显示堆栈跟踪
与-SIGSEGV
(或其他通知进程转储核心或终止的信号)不同,您可以点击Resume按钮继续运行进程。UX接近于遇到断点后的情况,但Eclipse会报告暂停执行的不同原因
请注意,如果您正在做的任何事情会干扰您的进程的信号处理,那么这可能无法按预期工作
但是,不知道是否有任何东西可以从EclipseUI触发