Quantcast
Channel: マルチスレッドアプリが mscorlib 内で実行時エラー
Viewing all 32 articles
Browse latest View live

マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

確認してみましたが、エラー発生時に通っていそうな場所には try/catch が入っていて、

Catchした場合には、トレースファイルに出力するようになっていましたが、

Catchできずに、実行時エラーがでます。

 

その時のエラー署名は、

EventType:clr20r3

P1:アプリ名

....

P4:mscorlib

P5:2.0.0.0

P6:4333ab80

P7:4055

P8:a3

P9Tongue Tiedystem.argumentoutofrange

 

となっています。

発生場所も不定です。


マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

諸農さん

 

再現可能な最小限のコードというのが難しいです。

ファイルIOだけの簡単なスレッドをワーカースレッドとして起動する分には、

40スレッド以上、上げても問題ありませんでした。

また、Databaseへ接続する処理を入れてみても同様です。

再現可能なアプリは、10個程の DLL,EXE (の拡張子のモジュール)を利用したアプリになっています。

 

スレッド数と発生確率としては、

 ノートPC 3スレッドで高確率

 デスクトップPC 10スレッドで高確率

に発生という印象です。

 

情報として不正確でしたが、

 mscorlib内でのエラーではなく、自作DLL内で例外発生している様子でした。(System.ArgumentOutOfRange)

(MSへ報告する内容の中に、mscorlibモジュールがあっただけのかも知れません・・・)

 

単にDLL内の例外キャッチが漏れているだけなのかもしれません。

当然、SyncLock/Mutex等の排他制御はしているのですが、この当りをもう少し精査してみます。

 

しかし BIOSの DualCoreを無効にすると発生しなくなるというのは、ほとんどシングルタスク状態で、

OSが動いているという事なのでしょうか?うーむ。。。

 

マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

諸農です。

 

 Puzzlerjp さんからの引用

BeginInvoke/EndInvoke + AsyncOperation で作成したBackgroundWorker的クラス

を使用して作成したスレッドの場合も、単に、 Thread.Start としたワーカースレッドの場合でも、

どちらでも発生しています。(恐らく)

 

興味があるので、申し訳ないのですが再現確認可能な最小限のコードを見せていただけないでしょうか。

HTなCPUを搭載したマシンであまりそのような現象にあったことがないです。最近Core2Duo搭載のノートパソコンを買ったので、そのマシンで追認してみたいと考えています(OSはVistaになりますが)。

 

スレッドが複数上がった場合に発生確率が高くなる辺りは、 .NET Framework自体にも原因があるのかと思い、

ここにポストします。

 

ちなみに、最大いくつのスレッドを作っているのでしょうか?

マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

 

Windows XP Pro

.NET Framework 2.0

Visual Studio 2005 SP1適用済 (Visual Basic 2005)

 

にて作成したマルチスレッドアプリケーションが、

頻繁に、 mscorlib 内で実行時エラーを出します。

(MSに報告するかどうか尋ねられる窓が出ます。一応続行はできます。)

 

BeginInvoke/EndInvoke + AsyncOperation で作成したBackgroundWorker的クラス

を使用して作成したスレッドの場合も、単に、 Thread.Start としたワーカースレッドの場合でも、

どちらでも発生しています。(恐らく)

 

PCの BIOS で、Dual Coreを無効にすると、発生しなくなりましたが、単に発生しにくくなっただけのようです。

(BIOSのDualCoreを無効にする事で完全に回避できるのか確証がまだ無い状態)

 

ノートPC(HP Compaq nx6320)で頻繁に発生していた為、Core2Duoプロセッサが原因かとも考えましたが、

(ノートPC(HP)の方では、 Intel Core2Duo のマイクロコードアップデートで、BIOSのアップデートを勧められています)

デスクトップ(DELL Optiplex 745)の、PentiumD でも発生しました。

 

また、デスクトップのBIOSで デュアルコアを無効にしても、直後の再起動時に発生しました。

その後は発生しにくくなっているのか、発生を確認できていません。

 

いずれにせよ、DualCoreを無効にすると、PCの動きが遅くなるので、やはりDualCoreを有効にしたいところです。

 

スレッドが複数上がった場合に発生確率が高くなる辺りは、 .NET Framework自体にも原因があるのかと思い、

ここにポストします。

 

マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

書き忘れましたが、

BIOSで DualCoreを有効にしても再現しなくなりました。

マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

NyaRuRuさん

 

Windbgの情報、ありがとうございます。

Windbg から実行させると、きっちり例外をキャッチできました。

やはり自作DLL内での スレッド セーフ実装が甘かっただけのようです。

 

特に sos.dllを loadしなくても、単にWindbgから実行するだけで

例外キャッチできました。

 

Windbgに

Unkown Exception - code e0434f4e (first chance)

CLR Exception - code e0434f4d (first chance)

というような出力もありましたが、アプリを直接起動した時にはエラーはでないので、無視してます。(^^;

sos.dllを loadしてもメッセージは変わりませんでした。

 

以上、お騒がせしました。。。

 

P.S.

 アプリのTrace出力が Windbgにも表示されているのを見た時はちょっと嬉しかったです。

マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0
 Puzzlerjp さんからの引用

確認してみましたが、エラー発生時に通っていそうな場所には try/catch が入っていて、

Catchした場合には、トレースファイルに出力するようになっていましたが、

Catchできずに、実行時エラーがでます。

 

なんとなくの印象ですが,マルチスレッドでかつmscorlibということだと,マネージ例外として発生したときは既にタイミングと重要な情報が失われているような気がします.

マネージドな try/catch は,「何かトラブルが起きた」ということは分かっても,詳細なデバッグ用途の正確さという点では不十分なことがあるので,Visual Studio やwindbg + sos.dll などで「本当に最初の例外が起きた瞬間」を調べるところから始められてみてはいかがでしょうか?

 

とりあえずデバッグ作業としてはまだスタート地点ぐらいだと思います.

 

たとえば,ワーカースレッドの中で例外が起きてたりしませんか?

Visual Studio のメニューから「デバッグ」→「例外」を選ぶと,生の例外発生時にブレークするように設定できます.さらに,プロジェクト設定の「デバッグ」→「アンマネージ コード デバッグを有効にする」をチェックしておくと,mscorlib 内で Win32 例外が発生した場合もブレークできるようになります.

マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

MSのKBを検索してみて、

http://support.microsoft.com/kb/326281/ja

を見つけました。

やはり、mscorlib内で、ハンドルされない例外が発生しているという事で間違いないのでしょうか?

DualCoreの場合に、パフォーマンスカウンタ値関係の所でなにかおかしな事になっているのかとも考えられますが・・・

 

MSさんが、現地に見に来てくれれば再現は簡単にできるんですがね・・・

 


マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

確認してみましたが、エラー発生時に通っていそうな場所には try/catch が入っていて、

Catchした場合には、トレースファイルに出力するようになっていましたが、

Catchできずに、実行時エラーがでます。

 

その時のエラー署名は、

EventType:clr20r3

P1:アプリ名

....

P4:mscorlib

P5:2.0.0.0

P6:4333ab80

P7:4055

P8:a3

P9Tongue Tiedystem.argumentoutofrange

 

となっています。

発生場所も不定です。

マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

諸農さん

 

再現可能な最小限のコードというのが難しいです。

ファイルIOだけの簡単なスレッドをワーカースレッドとして起動する分には、

40スレッド以上、上げても問題ありませんでした。

また、Databaseへ接続する処理を入れてみても同様です。

再現可能なアプリは、10個程の DLL,EXE (の拡張子のモジュール)を利用したアプリになっています。

 

スレッド数と発生確率としては、

 ノートPC 3スレッドで高確率

 デスクトップPC 10スレッドで高確率

に発生という印象です。

 

情報として不正確でしたが、

 mscorlib内でのエラーではなく、自作DLL内で例外発生している様子でした。(System.ArgumentOutOfRange)

(MSへ報告する内容の中に、mscorlibモジュールがあっただけのかも知れません・・・)

 

単にDLL内の例外キャッチが漏れているだけなのかもしれません。

当然、SyncLock/Mutex等の排他制御はしているのですが、この当りをもう少し精査してみます。

 

しかし BIOSの DualCoreを無効にすると発生しなくなるというのは、ほとんどシングルタスク状態で、

OSが動いているという事なのでしょうか?うーむ。。。

 

マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

諸農です。

 

 Puzzlerjp さんからの引用

BeginInvoke/EndInvoke + AsyncOperation で作成したBackgroundWorker的クラス

を使用して作成したスレッドの場合も、単に、 Thread.Start としたワーカースレッドの場合でも、

どちらでも発生しています。(恐らく)

 

興味があるので、申し訳ないのですが再現確認可能な最小限のコードを見せていただけないでしょうか。

HTなCPUを搭載したマシンであまりそのような現象にあったことがないです。最近Core2Duo搭載のノートパソコンを買ったので、そのマシンで追認してみたいと考えています(OSはVistaになりますが)。

 

スレッドが複数上がった場合に発生確率が高くなる辺りは、 .NET Framework自体にも原因があるのかと思い、

ここにポストします。

 

ちなみに、最大いくつのスレッドを作っているのでしょうか?

マルチスレッドアプリが mscorlib 内で実行時エラー

$
0
0

 

Windows XP Pro

.NET Framework 2.0

Visual Studio 2005 SP1適用済 (Visual Basic 2005)

 

にて作成したマルチスレッドアプリケーションが、

頻繁に、 mscorlib 内で実行時エラーを出します。

(MSに報告するかどうか尋ねられる窓が出ます。一応続行はできます。)

 

BeginInvoke/EndInvoke + AsyncOperation で作成したBackgroundWorker的クラス

を使用して作成したスレッドの場合も、単に、 Thread.Start としたワーカースレッドの場合でも、

どちらでも発生しています。(恐らく)

 

PCの BIOS で、Dual Coreを無効にすると、発生しなくなりましたが、単に発生しにくくなっただけのようです。

(BIOSのDualCoreを無効にする事で完全に回避できるのか確証がまだ無い状態)

 

ノートPC(HP Compaq nx6320)で頻繁に発生していた為、Core2Duoプロセッサが原因かとも考えましたが、

(ノートPC(HP)の方では、 Intel Core2Duo のマイクロコードアップデートで、BIOSのアップデートを勧められています)

デスクトップ(DELL Optiplex 745)の、PentiumD でも発生しました。

 

また、デスクトップのBIOSで デュアルコアを無効にしても、直後の再起動時に発生しました。

その後は発生しにくくなっているのか、発生を確認できていません。

 

いずれにせよ、DualCoreを無効にすると、PCの動きが遅くなるので、やはりDualCoreを有効にしたいところです。

 

スレッドが複数上がった場合に発生確率が高くなる辺りは、 .NET Framework自体にも原因があるのかと思い、

ここにポストします。

 

Viewing all 32 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>