当应用程序没有响应时,如何优雅地退出在 gdb 中运行的应用程序。

当应用程序没有响应时,如何优雅地退出在 gdb 中运行的应用程序。

这有点关系gdb 设置覆盖日志记录应该覆盖 gdb.txt 正确吗?

假设我正在运行某个应用程序的会话。为了举例说明,让我再次以 qbittorrent 为例。

正如之前分享的,跑步是如何发生的——

$ gdb qbittorrent 
(gdb) set logging overwrite on 
(gdb) set logging on 
(gdb) set pagination 0
(gdb) run

我知道的一种方法是优雅地退出应用程序,但有时应用程序会挂起/花费太多时间或根本没有响应。

然后我剩下的唯一选择是使用CTRL+C它,如果我理解正确的话,会杀死底层应用程序,在我们的示例 qbittorrent 中,然后我能够通过以下方式退出 gdb

(gdb) quit

是否有任何其他方法可以退出应用程序并仍然让 gdb 会话继续运行,或者唯一的方法是我上面提到的粗略方法。

AFAI 知道终止应用程序进程应该是最后的解决方案,而不是第一个解决方案。

答案1

您可以为此使用信号。在启动程序之前,请在不影响程序的情况下进行设置USR1USR2中断:gdb

handle SIGUSR1 nopass

然后你可以运行你的程序,当你需要停止它时,kill -USR1从另一个具有适当(子)pid 的 shell 运行。gdb将暂停应用程序,然后您可以添加断点、检查状态等,如果需要,可以使用 继续执行cont

相关内容