clion에서 디버깅하는 동안 실행중인 프로그램을 중지시키는 "중지"버튼 (빨간색 사각형)이 있습니다. 현재 테스트를 작성하고 디버깅하려고합니다. 내 테스트 케이스는 나중에 정리해야하는 임시 디렉토리와 파일을 만들지 만 버튼을 누르면 소멸자 나 신호 처리기가 호출되지 않습니다. "stop"버튼을 누르면 번들로 묶인 GDB에서 방출되는 신호를 잡는 방법은 무엇입니까?
이
(나는 실제로 GDB에 의해 사용되는 모르겠어요 때문에, 그들 중 많은) 내가 신호를 처리하는 방법입니다 :DLOG_S(INFO) << "Registering signal handlers for test files cleanup";
if (signal(SIGABRT, TemporaryDirectory::handle_cleanup) == SIG_ERR)
DLOG_S(INFO) << "Registering SIGABRT failed";
if (signal(SIGTERM, TemporaryDirectory::handle_cleanup) == SIG_ERR)
DLOG_S(INFO) << "Registering SIGTERM failed";
if (signal(SIGINT, TemporaryDirectory::handle_cleanup) == SIG_ERR)
DLOG_S(INFO) << "Registering SIGINT failed";
if (signal(SIGALRM, TemporaryDirectory::handle_cleanup) == SIG_ERR)
DLOG_S(INFO) << "Registering SIGALRM failed";
그리고 이것은 (정적) 내 처리기 방법 :
void test_utils::TemporaryDirectory::handle_cleanup(int signo) {
DLOG_S(INFO) << "Received signal " << signo;
if (signo == SIGABRT || signo == SIGTERM || signo == SIGINT || signo == SIGALRM) {
DLOG_S(INFO) << "Cleaning up test files";
TemporaryDirectory::test_files_root().cleanup();
}
}
로그에 등록 실패 메시지가 없지만 실제로 처리되는 신호가 표시되지 않습니다.
또한 GDB 콘솔에서 handle all nostop
을 입력하여 구성을 변경하려고 시도했지만 그 후에도 응용 프로그램이 종료됩니다.
clion의 번들 된 GDB가 중지 된 후 치료할 방법이 있습니까?
[신호가 중지 버튼에서 전송되었습니다] (https://intellij-support.jetbrains.com/hc/en-us/community/posts/203374490-Signal -sent-by-stopping-button) –
@MarkPlotnick 예, 신호를 보내는 GDB라는 것을 알고 있습니다. 그러나 당신이 clion의 버튼을 누를 때 보내는 신호는 나에게 수수께끼입니다. 또한, 묶음 GDB가 있기 때문에 태그에 clion을 추가했습니다. 독립 실행 형 GDB와는 다르게 작동 할 수도 있습니다. – Jezor
또한 위와 같이 볼 수 있듯이 이미'SIGTERM'을 처리하지 않으려 고 시도했습니다. – Jezor