現在実行中のメソッド名を取得する MethodBase.GetCurrentMethod()
System.Reflection.MethodBase.GetCurrentMethod().Name
現在実行中のメソッド名を取得する MethodBase.GetCurrentMethod()
System.Reflection.MethodBase.GetCurrentMethod().Name
C#のstaticコンストラクタが実行中に、他のスレッドから同じクラスのstaticメンバにアクセスがあったとき何が起こるか 【▲→川俣晶の縁側→ソフトウェア→技術雑記】
マルチスレッド環境でも、staticなメンバーへのアクセスは、staticなコンストラクタの実行が完了されるまで遅延されているので、問題なし。
Debugging Tools for Windowsを使用して、IIS のワーカプロセス上に存在するアプリケーションドメインの情報を取得する方法。
- Windows 用デバッグ ツール : 概要
http://www.microsoft.com/japan/whdc/DevTools/Debugging/default.mspx
上記サイトより、利用しているOSに合う Debugging Tools for Windows をダウンロードしてインストールする。
サイト中の下記リンクよりダウンロードが可能。
・Debugging Tools for Windows 32 ビット バージョンのインストール
・Debugging Tools for Windows 64 ビット バージョンのインストール
本パッケージに含まれるWinDbg を用いて AppDomain の情報を取得する。
WinDbg を使用するにあたって、まずはシンボルパスの設定を行う必要がある。
以下の手順でシンボルパスの設定を行う。
1. windbg.exe を起動する。 (デフォルトの設定でインストールした場合、 C:\Program Files\Debugging Tools for Windows\ にある。)
2. [File] メニューより [Symbol File Path] を選択する。 [Symbol Search Path] ダイアログが開く。
3. 開いたダイアログの Symbol path テキストボックスに、以下のように記入する。
SRV*<ダウンストリーム ストア>*http://msdl.microsoft.com/download/symbols
以下の手順を実施するにはMSのサイトで公開しているシンボルが必要となるが、上記ダウンストリーム ストア は、MSのサイトよりシンボルを自動的にダウンロードしキャッシュするフォルダとなる。ここには、自分が書き込み権限を持つ任意のフォルダを指定する。
たとえば、 C:\symbols をダウンストリームストアにする場合、以下のようになる。
SRV*C:\symbols*http://msdl.microsoft.com/download/symbols
- デバッグ ツールとシンボル : はじめに
http://www.microsoft.com/japan/whdc/DevTools/Debugging/debugstart.mspx
ASP.NET アプリケーションを起動し、w3wp.exe を起動する。
タスクマネージャから w3wp.exe の PID を確認する。
w3wp.exe がタスクマネージャに現れない場合、実行ユーザごとのフィルタリングが行われている可能性がある。
その場合、 [すべてのユーザーのプロセスを表示] ボタンより、全ユーザのプロセスを表示する。
管理者権限でコマンドプロンプトを起動する。
Debugging Tools for Windows のインストール先フォルダへ移動する。
(デフォルトでは C:\Program Files\Debugging Tools for Windowsにある)
以下のコマンドを実行する。
windbg.exe -c ".logopen <logfilename>;.loadby sos mscorwks;!dumpdomain;qd" -p <PID>
<logfilename> にはログファイルの出力先を、 <PID> には、情報を取得したいプロセスの PID を指定する。
今回の場合、 <PID> の部分には w3wp.exe の PID が入ることになる。
たとえば、 PID 1234 のプロセスの AppDomain の情報を c:\log.txt に出力する場合、以下のコマンドになる。
windbg.exe -c ".logopen c:\log.txt;.loadby sos mscorwks;!dumpdomain;qd" -p 1234
以上で、 windbg を用いて、プロセス中に含まれる AppDomain の情報を取得可能。
AppDomain の情報は、上記コマンドで指定した log.txt から確認できる。
その確認方法は以下の通り。
上記コマンドで出力した結果はテキストデータとして指定したパスに保存されている。
当該ファイルをテキストエディタにて開き、下記 2 行に該当する行を探す。
-------------------------------------- Domain <num>: (<num> には 1 から始まりプロセス中に存在する AppDomain の数までの通し番号が入る。)
出力結果には、上記 2 行を区切りとしてプロセス中に含まれる AppDomain の情報が列挙されている。
この情報より、 AppDomain の存在有無について確認する。
-------------------------------------- Domain 4: 0ecc01a0 LowFrequencyHeap: 0ecc01c4 HighFrequencyHeap: 0ecc0210 StubHeap: 0ecc025c Stage: OPEN SecurityDescriptor: 016df778 Name: MyAppDomain_B (以下、ロードされているアセンブリについての情報が続く)
今回は、SOS デバッガ拡張に含まれている、 DumpDomain コマンドを用いることで、プロセス中の AppDomain の情報を取得した。
SOS デバッガ拡張の詳細は、以下のドキュメントを参照。
- SOS デバッガ拡張 (SOS.dll)
http://msdn.microsoft.com/ja-jp/library/bb190764.aspx
AppDomain.Unload - (hatena (diary 'Nobuhisa))
アンロードするターゲットドメインに終了できないスレッドがある場合、そのドメインをアンロードできない。その場合、呼び出し元スレッドで、CannotUnloadAppDomainExceptionが発生する。
Logging ASP.NET Application Shutdown Events - ScottGu's Blog
ASP.NETアプリケーションが再起動(アプリケーションドメインがアンロード)されたら、その原因などをログに書き出すコードスニペット。
増補改訂版Java言語で学ぶデザインパターン入門のサンプルコードをC#、VB.NETに移植したもの。
窓際プログラマーの独り言 -C#の話題を中心に:C#デザインパターン Index
Gushwell's C# Programming Page - C#デザインパターン (C#3.0に対応)
VB.NETとC#でデザインパターン