如何在一开始就停止一个程序,以便将GDB附加到它上



我想在C++程序的开头显示一个PID,并发送一个等待信号,这样我就可以在另一个终端中运行gdb - PID。然后按下gdb终端中的run,程序应继续。

如果我使用

pid_t pid = getpid();
cout << "PID = " << pid << endl;
raise(SIGSTOP);

我在输出中看到了这一点

$ ./run
PID = 30261
[1]+  Stopped                 ./run
$

因此,程序进入后台并停止。另一方面,如果我使用SIGINT,我会看到

$ ./run
PID = 8790
Caught signal: 2
$ 

我该怎么解决?

因此,程序进入后台并停止

是什么阻止您附加到已停止的进程?

现在,您可以连接到pid编号为30261的进程,并继续执行程序。另请参阅等待gdb附加的相关问题。

gdb ./run 30261

您不需要使用信号来暂停应用程序,只需等待您感兴趣的特定信号即可。

int main(){
std::cout << "PID = "  << getpid() << std::endl;
int sig;
sigset_t signal_set;
sigemptyset(&signal_set);
sigaddset(&signal_set, SIGCONT); 
sigwait( &signal_set, &sig  );

std::cout << "continued"  << std::endl;
}

最新更新