9

私のプログラム(ドライバーではなく、単純なユーザーランドプログラム)がブルースクリーンオブデス(BSOD)でシステムをクラッシュさせていると言った顧客がいます。彼は、他のプログラムでこれに遭遇したことはなく、私のもので簡単に再現できると言います。

BSODのタイプはCRITICAL_OBJECT_TERMINATION(0x000000F4)で、オブジェクトタイプは0x3(process)です。システム操作に不可欠なプロセスまたはスレッドが予期せず終了または終了しました。

単純なプログラムがBSODを担当できますか(Vistaでも...)、ハードウェアまたはOSのインストールを確認する必要がありますか?

4

8 に答える 8

10

プログラムがドライバーではないからといって、ドライバーを使用しないという意味ではありません。

理論的には、コードがコンピューターをBSODできないようにする必要があります。それが起こらないようにするのはOS次第です。定義上、これは、ハードウェアまたはプログラム以外のコードのどこかに問題があることを意味します。ただし、コードにバグがあることを排除するものではありません。

于 2009-10-19T12:42:31.277 に答える
6

ユーザースペースプログラムでBSODを発生させる最も簡単な方法は、(afaik)Windowsサブシステムプロセス(csrss.exe)を強制終了することです。これには、障害のあるハードウェアやカーネルまたはドライバーのバグは必要ありません。必要なのは管理者権限1だけです。

あなたのコードは正確に何をしていますか?エラーメッセージ(「システム操作に不可欠なプロセスまたはスレッドが予期せず終了または終了しました。」)は、重要なシステムプロセスの1つが終了したように聞こえます。たぶん、あなたはプロセスを殺していて、意図せずに間違ったプロセスを取得していますか?

どういうわけか可能であれば、その顧客からメモリダンプを取得しようとすることができます。次に、Windows用のデバッグツールを使用して、ここで説明するようにそのダンプをさらに分析できます。

1 Windowsは、 「管理者が自分のコンピューターを制御できるようにする」ため、そうすることを妨げません。したがって、これは仕様によるものであり、バグではありません。レイモンドの記事を読むと、その理由がわかります。

于 2009-10-19T13:02:19.710 に答える
4

通常、そうすべきではありません。もしそうなら、どちらかがなければなりません

  • Windowsカーネルのバグ(可能性はありますが、ほとんどありません)
  • デバイスドライバのバグ(必ずしもプログラムが使用するデバイスにあるとは限りません。これは非常に複雑になる可能性があります)
  • ハードウェアの障害

オプション番号2(デバイスドライバー)に賭けますが、より詳細なダンプを入手できれば興味深いでしょう。

于 2009-10-19T12:44:57.227 に答える
4

簡単な答えはイエスです。長い答えは、あなたのプログラムが何をすることになっているのか、そしてそれがどのように行われるのかによって異なります。

于 2009-10-19T12:42:43.063 に答える
3

はい、できますが、さまざまな理由があります。

そのため、さまざまなマシン、オペレーティングシステム、ハードウェアなどでテストを行っています。

プログラムにいくつかの要件を設定し、ユーザーはそれらをフォローしていますか?

于 2009-10-19T12:43:39.660 に答える
1

あなたがそれを自分で複製することができず、あなたのプログラムが実行するために管理者を必要としないなら、私は少し疑わしいでしょう

  • そのシステムのハードウェアの安定性
  • そのシステムのウイルス/マルウェアの状態。

クライアントボックスに物理的にアクセスできる場合は、最新のスキャナーで完全なウイルススキャンを実行し、その上で完全なmemtestを実行する価値があるかもしれません。

私はかつて安定しているように見えたシステムを持っていましたが、certianのいくつかのプログラムがその上で実行されなかった(そして時々ボックスをクラッシュさせた)ことを除いて。Memtestは、私のRAMにいくつかの悪いビットがあることを示しましたが、それらはより高いシムであったため、プログラムが大量のRAMを使用しようとした場合にのみアクセスされました。

于 2009-10-19T14:01:07.443 に答える
1

いいえ、それはほとんど定義によるものです。あなたが言うことができる最悪のことは、ユーザーランドアプリケーションがWindowsのバグまたはドライバーのバグを「引き起こした」かもしれないということです。しかし、最新のデスクトップオペレーティングシステムは、それ自体の整合性に完全に責任があります。BSODは、その整合性の失敗です。したがって、OSが責任を負い、OSのみが責任を負います。

(アプリケーションだけで発生する可能性のあるBSODバグの例:ドライバーとして実装されたウイルススキャナー。セクター0xFFFFFFFFからファイルを実行するとクラッシュします。このセクターは、この1台のマシンにアプリケーションのDLLが1つ含まれているだけです)

于 2009-10-19T14:13:51.953 に答える
0

プログラムの終了時にすべてのプロセスとBD接続を停止せずにアプリを終了すると、問題が発生しました(IDE全体がクラッシュしました)。メインフォームの「Form_Closed」イベントの「Terminate」に「stoppinganddisconnecting」コードを配置しましたが、問題は解決しました。これがあなたの状況かどうかはわかりません。

別の問題は、ユーザーがアプリが使用しているのと同じリソース(データベース、ハードウェア、ソケットなど)にアクセスしようとしている場合です。BSODが発生したときに使用しているアプリについて尋ねます。

ウイルスは廃棄できません。

于 2009-10-19T15:39:19.040 に答える