実行中のアプリケーションが「セグメンテーションエラー」で終了します。

実行中のアプリケーションが「セグメンテーションエラー」で終了します。

実行時に予期したタスクを実行せずにある時点でメッセージを残すコマンドラインアプリケーションがあります。

Segmentation fault

どういう意味ですか?どうすればいいですか?

ベストアンサー1

セグメンテーションエラーメモリアクセス違反の結果です。プログラムは割り当てられたアドレス以外のメモリアドレスを参照し、オペレーティングシステムカーネルはSIGSEGVを使用してプログラムを終了して応答します。

アクセスできないメモリにアクセスしようとすると意味がないため、エラーが発生します(不可能)。ただし、この種の間違いは、特にCやC ++(多くの一般的なアプリケーションを占める)などの言語で発生しやすいです。プログラム自体またはリンクされたライブラリにバグがあることを示します。バグを報告するには(これを行う - 役に立ちます)、以下を含めることをお勧めします。逆追跡セグフォルトを発生させたイベントです。

これを行うには、プログラム(GNUデバッガ)を内部的に実行するgdbか、インストールされていない場合はすべてのLinuxディストリビューション(パッケージ名は「gdb」)で実行できます。破損したアプリが「brokenapp」と呼ばれる場合:

gdb brokenapp

著作権とライセンスに関するセクションが表示され、カーソルの付いたプロンプトが表示されます。

(gdb) _ 

Enterを押してrunEnterを押します。パラメータ(たとえば-x --foo=bar whatever)を指定する必要がある場合は、これらのパラメータ(run -x --foo=bar whatever)を追加してください。プログラムはそのタスクを実行し、出力を表示し、対話が必要な場合はそれを行うことができます(GUIプログラムを含むgdb内であらゆる種類のプログラムを実行できます)。通常、セグフォルトが発生する場所には以下が表示されます。

Program received signal SIGSEGV, Segmentation fault.
0x00000000006031c9 in ?? ()
(gdb) _

ここで、出力の2行目は単なる例です。ここでbt("backtrace")と入力してEnterを押します。もっと長いかもしれませんが、次のようなものが表示されます。

(gdb) bt
#0  0x00000000006031c9 in ?? ()
#1  0x000000000040157f in mishap::what() const ()
#2  0x0000000000401377 in main ()

時間が長いと、一度に1つの画面しか表示されず、メッセージが表示されます--More--。完了するまでEnterキーを押し続けます。これで出力がquit端末に保持されます。すべてのコンテンツをテキストファイルにコピーし、Program received signal SIGSEGVアプリのバグトラッカーを使用してバグレポートを送信します。たとえば、「brokenapp bug report」を検索してオンラインでこの情報を見つけることができます。電子メールで返信を送信するには、登録が必要な場合があります。問題の説明、提供された引数runなど、およびバックトレースのコピーが含まれます(長い場合は、バグトラッカーインターフェースにテキストファイルを添付する方法があるかもしれません)。それが何であるかを知っている場合は(brokenapp --version機能しているかもしれませんが、マニュアルページでどのように入手するかがわかります)、バージョンと使用しているディストリビューションも含めてください。

誰かがすぐにあなたに連絡することを願っています。通常、バグを提出することをお勧めします。

おすすめ記事