如何在开始时停止程序以便将 GDB 附加到该程序?
How to stop a program at the beginning in order to attach GDB to that?
我想在我的 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
$
我该如何解决?
您不需要使用信号来暂停您的应用程序,您可以等待您感兴趣的某个信号。
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;
}
So, the program goes in the background and stops
是什么阻止您附加到已停止的进程?
您现在可以附加到 pid 号为 30261 的进程并继续执行程序。另见相关问题 wait for gdb to attach。
gdb ./run 30261
我想在我的 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
$
我该如何解决?
您不需要使用信号来暂停您的应用程序,您可以等待您感兴趣的某个信号。
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;
}
So, the program goes in the background and stops
是什么阻止您附加到已停止的进程?
您现在可以附加到 pid 号为 30261 的进程并继续执行程序。另见相关问题 wait for gdb to attach。
gdb ./run 30261