如何将信号发送到在 KDevelop 中以调试模式启动的程序

Howto send signals to a program started in Debug mode in KDevelop

本文关键字:调试 模式 启动 程序 KDevelop 信号      更新时间:2023-10-16

我想分析一个我用KDevelop编写的程序。我编译程序并启动它

右键单击 CMake 项目 -> 调试为... ->本机应用程序

现在程序在KDevelop中运行,我可以在嵌入KDevelop的控制台上看到输出。当我按 Ctrl+C"(SIGTERM)时,我的程序停止运行。当我在 KDevelop 之外的控制台中运行程序时,我可以按下它。

如何将信号"SIGTERM"发送到KDevelop内部的嵌入式控制台?

作为一种解决方法,我可以启动 htop,选择程序并从那里发送 SIGTERM,它工作正常,尽管在 KDevelop 本身中拥有所有功能会更好。

一种可能的解决方案是:

  • 右键单击 CMake 项目 ->调试为... ->本机应用程序。
  • 更改为 KDevelop 中的"gdb"-选项卡。
  • 点击右上角的"暂停"图标以启用"gdb"选项卡的输入字段
  • 类型 signal <Signal> ,例如 signal SIGTERM
  • 程序继续并捕获发送的信号。

使用 kill 命令向进程发送信号。 kill -l应为您提供信号及其 ID 的列表。

例如, 在 FreeBSD 上, SIGTERM 信号是 #15, 如以下输出所示:

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGEMT       8) SIGFPE       9) SIGKILL     10) SIGBUS
11) SIGSEGV     12) SIGSYS      13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGURG      17) SIGSTOP     18) SIGTSTP     19) SIGCONT     20) SIGCHLD
21) SIGTTIN     22) SIGTTOU     23) SIGIO       24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGINFO     30) SIGUSR1
31) SIGUSR2

因此,要向我的进程发送 SIGTERM,我查找进程 ID,然后向其发送一个 kill 命令,如下所示:

kill -15 <process ID>

您可以从 KDevelop 内部发送 SIGINT:

运行 -> 中断

但是,您无法发送任何其他信号。

如果您认为这是一个有用的功能,请在 bugs.kde.org 上创建一个愿望请求 - 最终包括附加的补丁:D