troushoo

Process Explorerで.NETアプリのスタックを確認

今回はProcess Explorerのバージョン15.2より搭載された.NETアプリのスタック を確認する方法を紹介します。

今回利用するサンプルアプリ
func1()、func2()と呼び、func2()の中でReadLine()を呼ぶだけの単純なアプリです。

using System;
 
namespace ProcMonStack
{
    class Program
    {
        static void func2()
        {
            Console.WriteLine("ReadLine中");
            Console.ReadLine();
        }
        static void func1()
        {
            Console.WriteLine("func1");
            func2();
        }
        static void Main(string[] args)
        {
            func1();
        }
    }
}
ReadLine()実行中のスタックをProcess Explorerで見てみます。

Process Explorerで.NETアプリのスタックを確認する方法
1. 上記のコードの.NET アプリ(=ProcMonStack.exe)を作成し、起動します。
ReadLine()で待っている状態となります。

 注意点
 ・.NET Frameworkのバージョンは4.0以上である必要があります。
 ・x64 OS上のx86 .NETアプリのスタックを確認する方法は現状無いようです。
 (Microsoftの.NET Framework Blogのコメント欄に同様の趣旨の質問がありましたが、回答がありませんでした。)
2. Process Explorerを起動します。
3. シンボルの設定をします。
シンボルの設定をするには、Options -> Configure Symbolsをクリックします。

その後、Dbghelp.dllにMicrosoft Debugging Tools for Windowsに同封されているdbghelp.dllを指定し、Symbol pathはC:\symbolsをシンボルを格納するフォルダとする場合は、srv*c:\symbols*http://msdl.microsoft.com/download/symbols と入力します。

 補足:
 ・マネージスレッドのスタックの表示するにはシンボルは必須ではありませんが、アンマネージスレッドのスタックを正しく表示するにはシンボルが必要です。
 ・シンボルの設定をせずにスタックを表示しようとすると以下のワーニングが表示されることがあります。
 
4. ProcMonStack.exeをダブルクリック(もしくは右クリックしてPropertiesを選択)します。

5. ntdll.dll!RtUserThreadStartをダブルクリックします。

 補足)
 ・Microsoftの.NET Framework Blogによると、調べたいスレッドを探すには若干のトライアンドエラーが必要とのことです。
6. マネージスタックとアンマネージスタックが表示されます。
ProcMonStack.exeのコールスタックも確認できていることがわかります(青色の部分)。
また、"Managed to Unmanaged Transition"、"Unmanaged to Managed Transition"とあり(赤色の部分)、マネージコード・アンマネージコードの移動の部分がわかります。

補足
・x64 OS上のx86 .NETアプリのスタックを表示するとどうなるか?
上記に記述したように、Process Explorerでx64 OS上のx86 .NETアプリのスタックを表示する方法は現状無いようです。実際に試してみると、以下のようになり、ProcMonStack.exeのコールスタックがわかりません。

URL
New .NET Diagnostic info added to Process Explorer
http://blogs.msdn.com/b/dotnet/archive/2012/06/26/new-net-diagnostic-info-added-to-process-explorer.aspx
・Process Explorer
http://technet.microsoft.com/ja-jp/sysinternals/bb896653.aspx


  1. 2012/07/05(木) 14:10:11|
  2. ツール
  3. | トラックバック:0
  4. | コメント:0
<<Visual Studio 2012とWinDbgの統合 | ホーム | MDA (Managed Debugging Assistants)を利用したデバッグ>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/64-3b013a0d
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (92)
ネットワーク (76)
Visual Studio (56)
SOS・Psscor2/Psscor4 (25)
WinDbg (25)
Linux (23)
Azure (17)
Tips (20)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する