clionでのデバッグ中に、実行中のプログラムを停止する「停止」ボタン(赤い四角)があります。現在、私はテストを書いており、それらをデバッグしようとしています。私のテストケースでは一時的なディレクトリとファイルを作成し、後で整理する必要がありますが、ボタンを押してもデストラクタやシグナルハンドラは呼び出されません。"stop"ボタンを押すと、clion内のバンドルされた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だと認識しています。しかし、クリオンのボタンを押すと、私には謎が伝わってきます。また、スタンドアロンのGDBとは異なる動作をするバンドルされたGDBがあるので、タグにclionを追加しました。 – Jezor
また、上記のように、私はすでに 'SIGTERM'を無駄に処理しようとしました。 – Jezor