読書メモ/"Advanced Windows Debugging" の続編。
.NETアプリケーションのデバッグにおける、"Debugging Tools for Windows"やMS謹製のフリーツールの使用方法や問題分析の流れを詳しく解説している。
内容の詳細はアマゾンなどを参照して欲しい。
個人的なお薦めポイントとしては、CLRと.NET Frameworkの関係、「アセンブリ」の概念とロード機構、CLRのヒープ管理とGC、ファイナライズキューなどなどの、.NETで今ひとつ分かりづらいけど重要な「裏舞台」を分かりやすく紹介してくれている点。.NET入門者にとっては呪文めいた「アセンブリ」や「マニフェスト」といった用語がきちんと解説されている。
注意点としては、実際のデバッグの流れが掲載されているが、若干の省略が見られる点。特に
.loadby sos mscorwks
は省略されがちに思えた。デバッグコマンドが一つ一つ書かれているからと言って、その通りに最初から打ち込んでもうまくいかない原因は大抵、こうした前提となるイロハのコマンドが省略されているから。そこだけ注意が必要。
他にも何気にtypoミスがあったり、酷いところでは公式HPからDLできるサンプルコードに抜けがあったりする。下記HPを参照のこと。
いくつか「編集者真面目に仕事したのか・・・?」と首を傾げる点はあるものの、本書の価値を損なうほどのものではない。.NETアプリの開発に携わる人達であれば一読しておいて損はない一冊となっている。
以下、本書を読んでいて気になった点などメモ。補足的なメモや、本書出版から数年が経過している2011年現在、紹介されているツールでいくつか注意点が出てきたものなど。
http://geekswithblogs.net/.netonmymind/archive/2006/03/14/72262.aspx
のコメント参照。mscorwks.dllが読み込まれていない段階で".loadby"やっちゃってるので、まずは"g"などで続行させ、loadされた段階でCtrl-BREAK, Ctrl-Cなどで停止、".loadby"し直せばOK.
あるいは
sxe ld mscorwks.dll
しておけば、mscorwks.dllがロードされた時点で一旦デバッガにbreakするので、そこで ".loadby" してもよい。
CLR Profiler: 3.5までは 2.0のCLR使ってるので .NET 2.0用のCLR ProfilerでOKのはず。
http://stackoverflow.com/questions/1055803/is-there-a-clr-profiler-that-works-with-net-3-5-sp1-and-wpf
.NET 4.0で.NET 2.0用CLR使う場合は環境変数をセット。
http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/a97370a2-faf8-4a9c-8d0a-37099b8038b4
2011年1月末に、4.0に対応したCLRProfilerがでたばっかり:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=be2d842b-fdce-4600-8d32-a3cf74fda5e1
「管理者として実行」する+.NETランタイムのバージョンを確認する。片手落ちだとこのメッセージが消えず、プロファイルも取れない。
詳細は"CLRProfiler Waiting for application to start common language runtime"でggrks.
2011年3月以降、有償化されるようです。
http://www.atmarkit.co.jp/fdotnet/tools/dotfuscator/dotfuscator_01.html
http://www.red-gate.com/products/dotnet-development/reflector/
有効・無効の切り替え:
reg query HKLM\SOFTWARE\Microsoft\.NETFramework /v MDA reg add HKLM\SOFTWARE\Microsoft\.NETFramework /v MDA /t REG_SZ /d "1" reg add HKLM\SOFTWARE\Microsoft\.NETFramework /v MDA /t REG_SZ /d "0"
使い終わったら"0"に戻しておく。
"HKLM\Software\Microsoft\Fusion!EnableLog"を1にするのを忘れずに。
reg add HKLM\Software\Microsoft\Fusion /v EnableLog /t REG_DWORD /d 1
管理者権限が必要なので、Vista以降なら「管理者として実行」するのを忘れずに。
あと、ログ保存先は"Custom log"にしないと保存してくれなかった。
書かれてないのが不思議なくらいだったのでメモ。
!dumpdomain ↓ドメインの一覧→アセンブリGET !dumpassembly ↓アセンブリの一覧→モジュールGET !dumpmodule -mt ↓モジュール→ Method Table GET !dumpmt -md ↓MT→Method Descriptor GET !dumpmd ↓MD→"!name2ee"に渡せる完全タイプ名取得 !name2ee
ショートカット用のピンポイントメモ:
コメント