問題タブ [segmentation-fault]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++/GLFW - Mutex オブジェクトを使用する正しい方法は?
マルチスレッドを広く使用するシミュレーションに取り組んでいます。問題は、これまでデータを保護するためにミューテックス オブジェクトを使用したことがないということです。その結果、多くのセグメンテーション違反が発生しています..
読み取り/書き込み中にミューテックスでロック/ロック解除しようとしていますが、別のセグメンテーション違反が発生します:
もちろん、基本的な状況にロック/ロック解除を適用したテスト プロジェクトを作成し、それが機能しました。GLFW を使用して Mutex オブジェクトを処理する方法を示す基本的な例を次に示します。
私が取り組んでいるプロジェクトはより大きく、5 つのスレッドが実行されており、多くのベクトル、マップ、キューが同時にアクセスされます。コードのどこかで、次のようなことをしようとしました:
VehicleManager:CreateVehicles() メソッドをロック/ロック解除の間に配置する理由は、このメソッドに次の行があるためです。
だから私はベクトルを保護したかった: vehicle_. しかし、結果として、上記のセグメンテーション違反が発生しました。そしてでも:
私は同じセグメンテーション違反を起こしました。
あなたが私の問題の性質を理解できるように、私は自分自身を十分に明確にしたことを願っています. 皆さん全員が GLFW を使用したことがあるわけではないので、このライブラリでミューテックスがどのように機能するかを理解できるように、最初の基本的な例を示しました。
ありがとう !
linux - SEGV_MAPERR とは何ですか?
とは何SEGV_MAPERR
ですかSIGSEGV
。
c - C で破壊された静的変数をデバッグする (gdb が壊れている?)
私は多くのプログラミングを行いましたが、C はあまり使用していません。デバッグについてアドバイスが必要です。マルチスレッド プログラム (OS X 10.4 で pthreads を使用) を実行してから約 10 ~ 100 秒後に、静的変数 (ファイル スコープ) が破壊されています。私のコードは次のようになります。
addr
しばらくの間有効なメモリアドレスを指し、その後何らかの値 (0 の場合もあればゼロ以外の場合もある) で上書きされ、逆参照時にセグメンテーション違反が発生します。をいじってみると、期待どおりに がメモリ内に配置されgdb
ていることが確認されたので、最初に推測したのは、範囲外のインデックスを使用して に書き込んだということです。ただし、これは小さなファイルなので、問題がないことを簡単に確認できます。addr
some_values
some_values
明らかなデバッグ手法は、変数にウォッチポイントを設定することですaddr
。しかし、そうすると、 で不規則で不可解な動作が発生するようですgdb
。ウォッチポイントは、への最初の割り当てでトリガーされaddr
ます。その後、実行を続行すると、すぐに別のスレッドで無意味なセグメンテーション違反が発生します...おそらく、プログラムの別の部分で静的変数のアドレスにアクセスする際のセグメンテーション違反です! しかし、gdb
そのメモリ アドレスを対話的に読み書きできるようにします。
gdb
明らかに混乱しています。誰かが理由を知っていますか?または、ウォッチポイントを使用せずにこのバグをデバッグするための提案はありますか?
linux - Linux: SIGSEGV をデバッグするには? エラーの原因を追跡するにはどうすればよいですか?
私のFirefoxは今日からクラッシュし始めました。システムやFirefoxの設定は何も変更していません。
問題を追跡するために使用します。それは大きな助けではありません。
strace -ff -o dumpfile.txt firefox
生成された 2 つのプロセス ダンプに segfault が表示されますが、原因を突き止めるにはどうすればよいですか?
10 秒間実行してクラッシュした後、strace によって 22MB のデータが生成されます。
これは出力のスニペットで、実際の SIGSEGV が真ん中に表示されています。
image - MATLABでカメラを操作するセグメンテーション違反
私はMatlabを使用してカメラを操作しています。これはIDTSharpVisionカメラであり、会社が提供するMatlabインターフェイスを使用しています。画像を取得しようとすると、セグメンテーション違反が発生します。イメージの空の配列を作成してメモリを事前に割り当てようとしましたが、これは機能しません。
これは、セグメンテーション違反の原因となるコード行です。
SharpML.dllには、カメラを制御するためのMEXファイルが含まれています。
エラーメッセージスタックトレースからの選択は次のとおりです。
[0]QCamChildDriver.dll:0x160fdde4(0x0f99ef08、15、0x00ced938、0x00ced938)
[1] QCamDriver.dll:0x0f9c1dd8(4146、0x00ced938、0x00ced924、0x11283430)
[2] dll:0x0f991d8c(2、0x00cedf88、2、0x00cedfe8)
[3] SharpML.dll:0x0f991448(2、0x00cedf88、2、0x00cedfe8)
...
[
35] MATLAB.exe:0x00403bd2(1109972、0、0x7ffd9000、0x805512fa)
36] kernel32.dll:0x7c817077(0x00403daf、0、0x78746341、32)
助言がありますか?それ以来、カメラを製造している会社は廃業しました。
〜アダム
linux - Linux:「本当の」セグメンテーション違反ハンドラーはどこにありますか?
マップされていないアドレスに読み取り/書き込み/ジャンプした場合。
これにより、セグメンテーション違反が発生します。
マップされていないアドレスへの読み取り/書き込みを傍受し(どのように?)、「ユーザーモード」信号をスローするシステム(カーネル)の実際の部分は何ですか?
c - C のループに malloc/free が現れるとセグメンテーション違反
基本的に次のようなプログラムがあります。
これは単なる骨格ですが、うまくいけば十分な画像が得られます. A とにかく、通常は正常に動作しますが、n1、n2 の一部の値では、free(cplptr) がセグメンテーション違反を引き起こすようです。これは 1 回だけ呼び出され、cplptr への malloc() 呼び出しの後、cplptr の対応する free() の前にアドレスをチェックします。
アドレスが一致しているということは、free() が解放すべきものを解放しているということですよね?? gdb は、プログラムが受信したシグナル SIGSEGV、セグメンテーション違反を示します。0xb7ce179b in ?? () /lib/tls/i686/cmov/libc.so.6 およびステップから 現在の関数の境界が見つかりません
セグメンテーション違反を回避するようなものを実装する別の方法はありますか?
あなたの提案をありがとう!何が起こっているのか分かりますか??
linux - 保護されたメモリが与えられたときに、システムコールでSIGSEGVハンドラーを呼び出すにはどうすればよいですか?
私はmprotect
、プログラムのほとんどのメモリへのアクセスを削除するために使用するメモリ追跡ライブラリと、プログラムがページにアクセスしたときに個々のページへのアクセスを復元するためのSIGSEGVハンドラーに取り組んでいます。これはほとんどの場合うまく機能します。
私の問題は、私のライブラリがアクセスをマークしていないメモリを使用してプログラムがシステムコール(たとえばread
)を呼び出すと、システムコールは-1を返し、に設定errno
することEFAULT
です。これにより、テスト対象のプログラムの動作が奇妙な方法で変更されます。システムコールが実際にカーネルに送られる前に、システムコールに与えられたメモリの各ページへのアクセスを復元できるようにしたいと思います。
私の現在のアプローチは、メモリにアクセスする各システムコールのラッパーを作成することです。各ラッパーは、実際のシステムコールに渡す前に、与えられたすべてのメモリにアクセスします。これは、プログラムから直接行われた呼び出しでは機能するようですが、libcで行われた呼び出しでは機能しないようです(たとえば、ラッパーを使用せずに直接fread
呼び出します)。read
より良いアプローチはありますか?どうすればこの振る舞いを得ることができますか?
c++ - セグメンテーション違反の原因がわからない-C++
こんにちは私はプログラミングの経験がありますが、ポインタはあまり得意ではありません。作業中のこのプログラムをデバッグしようとしていますが、セグメンテーション違反が発生し続けます。私のコードは次のとおりです。
私の問題は、コードの次の部分にあるようです。
コードをコンパイルし、そのセクションが含まれていると、プログラムが実行されますが、最後にセグメンテーション違反が発生します。ただし、そのセクションをコメントアウトすると、すべてが正常に実行され、セグメンテーション違反は発生しません。通常の整数がどのようにセグメンテーション違反を引き起こしているのかわかりません。誰かが私が犯した間違いと私が犯した場所を説明してくれたら、私はそれを大いに感謝します。前もって感謝します
android - Android の JNI で SIGSEGV (セグメンテーション違反) をキャッチしてスタック トレースを取得するにはどうすればよいですか?
私はプロジェクトを新しい Android Native Development Kit (つまり JNI) に移行しています。SIGSEGV が発生した場合 (おそらく SIGILL、SIGABRT、SIGFPE) をキャッチして、適切なクラッシュ レポート ダイアログを表示したいと考えています。 (またはその前に)現在何が起こっているか:プロセスの突然の突然の終了と、おそらくOSによる再起動の試み。(編集: JVM/Dalvik VM はシグナルをキャッチし、スタック トレースやその他の有用な情報をログに記録します。その情報を実際にメールで送信するオプションをユーザーに提供したいだけです。)
状況: 私が書いていない大量の C コードが、このアプリケーション (すべてのゲーム ロジック) のほとんどの作業を行っており、他の多くのプラットフォームで十分にテストされていますが、私の Android でポートは、ガベージをフィードし、ネイティブ コードでクラッシュを引き起こすため、現在 Android ログに表示されているクラッシュ ダンプ (ネイティブと Java の両方) が必要です (Android 以外の状況では stderr になると思います)。C コードと Java コードの両方を任意に変更することは自由ですが、コールバック (JNI に出入りする両方) の数は約 40 であり、明らかに、小さな差分にはボーナス ポイントがあります。
J2SE のシグナル チェーン ライブラリである libjsig.so について聞いたことがあります。そのようなシグナル ハンドラを Android に安全にインストールできれば、質問のキャッチ部分は解決しますが、Android/Dalvik 用のライブラリはありません。 .