C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

いま、処理しているコードの場所を調べる方法

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■89045 / inTopicNo.1)  いま、処理しているコードの場所を調べる方法
  
□投稿者/ 与太郎 (1回)-(2018/10/28(Sun) 23:37:36)

分類:[.NET 全般] 

VB.NET2015を使ってプログラムを書いています。

プログラムを実行中に、クラッシュした場合にはデバッグモードで
どこに問題があるか調べることができますが、
フリーズする場合にはどこで止まっているか調べるにはどのようにしたら良いですか?
何か重い処理を行っている時に、
いまどこの処理を行っているか調べる方法があればお教えください。

引用返信 編集キー/
■89046 / inTopicNo.2)  Re[1]: いま、処理しているコードの場所を調べる方法
□投稿者/ Azulean (1003回)-(2018/10/29(Mon) 06:00:32)
No89045 (与太郎 さん) に返信
> フリーズする場合にはどこで止まっているか調べるにはどのようにしたら良いですか?
> 何か重い処理を行っている時に、
> いまどこの処理を行っているか調べる方法があればお教えください。

Visual Studio で実行中の話でしょうか?
そうであれば、ツールバーの一時停止ボタンを押すか、デバッグメニューからすべて中断を選ぶと、実行中のコードが表示されます。
もし、ツールバーやメニューにない場合は設定の変更が必要かもしれません。

Visual Studio で実行中ではない場合、
 Visual Studio が実行できる環境では、後からそのプロセスにアタッチして同様に中断させる、
 Visual Studio が実行できない環境では、WinDbg などのデバッガを使うか、ダンプファイルを生成して別環境で解析する
といったことが考えられます。


実行中の場所ではなく、処理の遅い箇所を調べるなら、プロファイリングという手も考えられます。
https://msdn.microsoft.com/ja-jp/library/ms182372.aspx?f=255&MSPPError=-2147217396
引用返信 編集キー/
■89058 / inTopicNo.3)  Re[2]: いま、処理しているコードの場所を調べる方法
□投稿者/ 与太郎 (2回)-(2018/10/29(Mon) 15:08:23)
ありがとうございます。

Visual Studio で実行中の話です。

ツールバーの一時停止ボタンを押すか、デバッグメニューからすべて中断を試してみたのですが

System.Windows.Forms.pdbは読み込まれていません


というエラーが発生して、実行中のコードを表示することができません。

その下に表示された
PDBとバイナリの依存の検索パスを変更してやり直す
というオプションを選んでから、
再度、デバッグをやり直してみたのですが

ソースは利用できません

というエラーが発生して、実行中のコードを表示することができません・



引用返信 編集キー/
■89062 / inTopicNo.4)  Re[3]: いま、処理しているコードの場所を調べる方法
□投稿者/ とっちゃん (548回)-(2018/10/29(Mon) 18:33:32)
No89058 (与太郎 さん) に返信
> ありがとうございます。
>
> Visual Studio で実行中の話です。
>
> ツールバーの一時停止ボタンを押すか、デバッグメニューからすべて中断を試してみたのですが
>
> System.Windows.Forms.pdbは読み込まれていません
>
>
> というエラーが発生して、実行中のコードを表示することができません。
>
> その下に表示された
> PDBとバイナリの依存の検索パスを変更してやり直す
> というオプションを選んでから、
> 再度、デバッグをやり直してみたのですが
>
> ソースは利用できません
>
> というエラーが発生して、実行中のコードを表示することができません・
>
>
>
フリーズ状態というのは「応答なし」の状態ですか?それであれば、中断した状態でスタックトレースを表示すれば自分のコードにたどり着けると思います。
また、停止状態によってはメインスレッド(UIスレッド)ではない場合もあるので、その場合はスレッドの切り替えなどが必要なこともあります。


また、.NET Framework 内のコードをたどりたい場合は、デバッグオプションの「マイコードのみを有効にする」「.NET Framework ソースのステッピングを有効にする」
の2つのチェック状態も確認が必要です。
そのほかにも影響する箇所はありますがまずこの二つを確認してみてください。いずれもオプションダイアログのデバッグページのチェックがいっぱいあるところにあります。

そうじゃない場合はもう少し状況を詳しくお知らせいただけるとほかの人も状況が推測できるかな?と思いますよ。
今の状況だと、それじゃデバッグは難しいだろうねぇ。。。というところですので。
引用返信 編集キー/
■89063 / inTopicNo.5)  Re[4]: いま、処理しているコードの場所を調べる方法
□投稿者/ 与太郎 (3回)-(2018/10/29(Mon) 19:21:01)
ありがとうございます。
言うのを忘れていましたが
UIスレッドではなく
バックグラウンドのスレッドです。
よろしくお願いいたします。

引用返信 編集キー/
■89066 / inTopicNo.6)  Re[5]: いま、処理しているコードの場所を調べる方法
□投稿者/ Azulean (1005回)-(2018/10/29(Mon) 20:42:10)
No89063 (与太郎 さん) に返信
> UIスレッドではなく
> バックグラウンドのスレッドです。

Windows.Forms 関連が出ていると言うことは UI スレッドです。
バックグラウンドのスレッドに表示を切り換えるか、デバッグ - ウィンドウ - 並列スタック ですべてのスレッドの状態を表示し、自分が探しているスレッドを見つけてダブルクリックして切り換える必要があります。
並列スタックがお好みに合わない場合は、デバッグ - ウィンドウ - スレッドでも切り換えられます。

引用返信 編集キー/
■89071 / inTopicNo.7)  Re[5]: いま、処理しているコードの場所を調べる方法
□投稿者/ とっちゃん (549回)-(2018/10/30(Tue) 11:09:58)
No89063 (与太郎 さん) に返信

> UIスレッドではなく
> バックグラウンドのスレッドです。

バックグラウンドのスレッドでフリーズ状態というのはどうやって判断したのでしょうか?

まずは、フリーズ状態と判断した条件の部分にブレークポイントを貼って、自分の判断があっているかや
フリーズ状態に突入する条件を絞り込んでみてはいかがでしょうか?

また、すでにAzuleanさんも指摘していますが、バックグラウンドのスレッドということなので、System.Windows.Forms.pdb が要求されるのは
別のUIスレッド側となるため、本来自分がチェックしたいスレッドを選択してという作業が必要です。

どんな状態でフリーズを判断したのかわかりませんが、UIスレッドを巻き込んで固まったのではないのなら
バックグラウンドのスレッドが意図せず終わってしまっている可能性もあると思います。
それも確認してみるといいと思います。

いずれにしても、フリーズの判断基準、そして自分の書いたプログラムコードでそうなる状況がどのような状況なのかを
ソースコードから類推しつつ、状況を絞り込んでいかないといつまでたっても解決しないと思います。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ