質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.32%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

192閲覧

VSCode上のターミナルでstd::abort()を呼んでも強制終了しない(C++)

TON

総合スコア3

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2025/03/12 13:35

編集2025/03/12 14:34

実現したいこと

VSCode上のターミナルでstd::abort()を呼んで強制終了させられるようにする。

発生している問題・分からないこと

VSCode上のターミナルでstd::abort()を呼んでも強制終了せず、一向にプログラムが終了しません。Ctrl + Cを押しても応答がなく、ターミナルを終了する他ありません。
しかし、Macの標準ターミナル上で実行したところ、
zsh: abort ./a.out
というメッセージと共に正しく強制終了しました。

このような現象がVSCodeでのみ起こる原因がわからず困っている状況です。

エラーメッセージ

error

1zsh: abort ./a.out (Macの標準ターミナルでのみ)

該当のソースコード

C++

1#include <cstdlib> 2 3int main() { 4 std::abort(); 5} 6

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ソースコードを以下のようにすると、Assertion failed: (0), function main, file main.cpp, line 4.というエラーが出力されますが、やはりブログラムが強制終了されません。

#include <cassert>

int main() {
assert(0);
}

補足

MacBook Air Apple M3 バージョン14.5
VSCode 1.98.1
C++20
g++ (Homebrew GCC 13.2.0) 13.2.0

実行したコマンド
g++ -std=c++20 main.cpp
./a.out

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2025/03/13 12:27

Macを持ってないのですが、回答もコメントも付かないので書いてみます。 > 強制終了せず は、具体的にどういう現象でしょうか? 言い換えると、何を見てどういう理由で「強制終了せず」と思ったのでしょうか? > zsh: abort ./a.out このメッセージはzshが出していますが、VSCode上のターミナルで動いているシェルもzshでしょうか?
TON

2025/03/13 13:56

コメントいただきありがとうございます。 > std::sbort()によってプログラムを異常終了させることを、ここでは強制終了と呼んでいました。正しい表現ができておらず申し訳ありません。 本来は Assertion failed: (0), function main, file main.cpp, line 4. zsh: abort ./a.out という2つのメッセージが出力された後にブログラムが異常終了し、次のコマンドが打てる状態になるはずですが、VSCode上のターミナルでは Assertion failed: (0), function main, file main.cpp, line 4. というメーセージのみが出力され、次のコマンドが打てない(Ctrl + Cも受け付けられない)状態になります。実行したコマンドやファイルが同じであるにも関わらずこのような現象が起きたことから、VSCode上ではプログラムが正しく終了できていないと判断しました。 > Macの標準ターミナルと同様に、VSCode上のターミナルで動いているシェルもzshです。
otn

2025/03/13 14:36

> Assertion failed: (0), function main, file main.cpp, line 4. それは、std::sbort() じゃなくて、assert(0) のプログラムでは?
TON

2025/03/13 14:43

「上記の詳細・結果」に記載した #include <cassert> int main() { assert(0); } のブログラムを実行した結果を誤って載せてしまいました。「該当のソースコード」にある #include <cstdlib> int main() { std::abort(); } のブログラムを実行すると、先ほどのコメントから Assertion failed: (0), function main, file main.cpp, line 4. の行を無くした結果が得られます。
otn

2025/03/13 16:36

VSCodeコンソールのzshで、 sh -c 'exit 123' だとすぐにzshのプロンプトが出て、 echo $? で、123が表示される。 sh -c 'kill -6 $$' だと、何もメッセージが表示されず実行も終わらず Ctrl-C もきかない ということですかね。 sh -c 'kill -9 $$' も同じでしょうか?
TON

2025/03/13 21:19

std::abort()の挙動とは違い、VSCodeターミナルとMacの標準ターミナルで同じ結果が得られました。 sh -c 'exit 123' ではすぐに次のプロンプトが現れ、 echo $? では123が表示され、 sh -c 'kill -6 $$' では zsh: abort sh -c 'kill -6 $$' というメッセージが出力され、実行も終わります。 sh -c 'kill -9 $$' の場合は zsh: killed sh -c 'kill -9 $$' というメッセージになります。
otn

2025/03/14 15:45

> sh -c 'exit 123' これはまあ、C/C++で、exit(123); をコールしたのとほぼ同じなので > ではすぐに次のプロンプトが現れ で普通ですね。 コンソールの操作方法自体が間違ってないかという確認のための質問でした。 > sh -c 'kill -6 $$' は、std::abort(); とほぼ同じはずですが、同じはずにもかかわらず、VScodeのzshで、 (1) sh -c 'kill -6 $$' ⇒ ちゃんとプログラムが終了して、zshがエラーメッセージを出す (2) std::abort(); ⇒ プログラムが終了しない。Ctrl-C も効かない ということだと、ちょっと分かりません。 他の言語(CとかPythonとかその他)で、同じく「自身のプロセスにSIGABRTを送る」を書いてみて、症例を増やして怪しい場所を探るのですかね。 > sh -c 'kill -9 $$' の場合は は、kill -6 が、両zshで異なる結果だった場合、さすがに kill-9 は同じだろうということを確認するための質問でしたが、kill -6 の結果が両zshで同じだったので、意味が無くなりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.32%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問