C++ 如何向KDevelop中以调试模式启动的程序发送信号

C++ 如何向KDevelop中以调试模式启动的程序发送信号,c++,signals,kdevelop,C++,Signals,Kdevelop,我想分析我用KDevelop编写的一个程序。 我编译这个程序并用 右键单击CMake项目->调试为…->本机应用程序 现在程序在KDevelop中运行,我可以看到嵌入到KDevelop中的控制台上的输出。 当我按下Ctrl+C键时,我的程序停止运行。当我在KDevelop之外的控制台中运行程序时,我可以按下它 如何将信号SIGTERM发送到KDevelop中的嵌入式控制台 作为一种解决方法,我可以启动htop,选择程序并从那里发送一个SIGTERM,虽然最好在KDevelop中拥有所有功能。使用

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

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

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

如何将信号SIGTERM发送到KDevelop中的嵌入式控制台


作为一种解决方法,我可以启动htop,选择程序并从那里发送一个SIGTERM,虽然最好在KDevelop中拥有所有功能。

使用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

一个可能的解决方案是:

右键单击CMake项目->调试为…->本机应用程序。 更改为KDevelop中的gdb选项卡。 点击右角的暂停图标以启用gdb选项卡的输入字段 类型信号,例如信号SIGTERM 程序继续,并捕获发送的信号。
仅供参考,我意识到您正在从KDevelop内部寻找解决方案。也许你至少可以使用这些信息为你指明正确的方向。确切地说,我正在从KDevelop内部寻找解决方案。KDevelop的嵌入式控制台无法识别按下Ctrl+C SIGTERM,这就是我寻求帮助的原因。之前我使用了kill and Co.最终得到了一个更舒适的htop:我没有意识到Run->Interrupt,我总是在gdb选项卡上点击Pause,看起来是一样的。我的节目正在收听SIGINT-SIGTERM&SIGBREAK。不知何故,KDevelop中发射的SIGINT似乎被gdb捕获了。也许有可能从运行我的程序的gdb发送SIGINT或SIGTERM。