如何在程序开始时停止程序,以便将GDB连接到该程序? 我想在我的C++程序开始时显示一个PID,并发送一个等待信号,这样我就可以在另一个终端上运行GDB—PID。然后在gdb终端中按run,程序应继续

如何在程序开始时停止程序,以便将GDB连接到该程序? 我想在我的C++程序开始时显示一个PID,并发送一个等待信号,这样我就可以在另一个终端上运行GDB—PID。然后在gdb终端中按run,程序应继续,c++,gdb,signals,C++,Gdb,Signals,如果我使用 pid_t pid = getpid(); cout << "PID = " << pid << endl; raise(SIGSTOP); 因此,程序进入后台并停止。另一方面,如果我使用SIGINT,我看到 如何解决这个问题?您不需要使用信号来暂停应用程序,只需等待您感兴趣的特定信号即可 int main(){ std::cout << "PID = " <&

如果我使用

   pid_t pid = getpid();
   cout << "PID = " << pid << endl;
   raise(SIGSTOP);
因此,程序进入后台并停止。另一方面,如果我使用SIGINT,我看到


如何解决这个问题?

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

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;
}

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

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;
}
因此,程序进入后台并停止

是什么阻止您连接到已停止的进程

现在,您可以附加到pid号为30261的进程并继续执行程序。另见相关问题

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

是什么阻止您连接到已停止的进程

现在,您可以附加到pid号为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;
}
gdb ./run 30261