home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

読書メモ/"Advanced .NET Debugging"

読書メモ/"Advanced .NET Debugging"

読書メモ / "Advanced .NET Debugging"
id: 925 所有者: msakamoto-sf    作成日: 2011-02-28 16:28:45
カテゴリ: .NET WinDBG Windows プログラミング 読書 

読書メモ/"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年現在、紹介されているツールでいくつか注意点が出てきたものなど。

".loadby sos mscorwks" で "Unable to find module 'mscorwks'" 発生

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とCLRのバージョン

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

CLR Profilerで "Waiting for application to start common language runtime" が消えない

「管理者として実行」する+.NETランタイムのバージョンを確認する。片手落ちだとこのメッセージが消えず、プロファイルも取れない。
詳細は"CLRProfiler Waiting for application to start common language runtime"でggrks.

その他、フリーの.NETアプリプロファイラ
http://d.hatena.ne.jp/Wacky/20080823/1219500273
本書中で紹介されているフリーの逆コンパイラ, ".NET Reflector"について

2011年3月以降、有償化されるようです。
http://www.atmarkit.co.jp/fdotnet/tools/dotfuscator/dotfuscator_01.html
http://www.red-gate.com/products/dotnet-development/reflector/

.NET Managed Debugging Assistants 参考資料

有効・無効の切り替え:

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"に戻しておく。

fuslogvw.exe 関連のトラブル

"HKLM\Software\Microsoft\Fusion!EnableLog"を1にするのを忘れずに。

reg add HKLM\Software\Microsoft\Fusion /v EnableLog /t REG_DWORD /d 1

管理者権限が必要なので、Vista以降なら「管理者として実行」するのを忘れずに。
あと、ログ保存先は"Custom log"にしないと保存してくれなかった。

アプリケーションドメイン一覧から"!name2ee"まで辿る流れ

書かれてないのが不思議なくらいだったのでメモ。

!dumpdomain
↓ドメインの一覧→アセンブリGET
!dumpassembly
↓アセンブリの一覧→モジュールGET
!dumpmodule -mt
↓モジュール→ Method Table GET
!dumpmt -md
↓MT→Method Descriptor GET
!dumpmd
↓MD→"!name2ee"に渡せる完全タイプ名取得
!name2ee
Chapter4 の 04CodeGen.exe(.cs) がおかしい
謎。 日記/2011/02/28/System.Reflection.Emitでの動的コード生成が謎の挙動を示す。 参照。

ショートカット用のピンポイントメモ:

MDA xml file -> "assistant" elements -> Alphanumeric order
p20
"sxe clr" enables CLR Exception break
p130
"Retail v.s. Debug Builds" from JIT & GC perspective
p223
"Pinned Objects", GC, "fixed" buffers
p248-
"!verifyHeap" and GC timing
p260
lock window and "lock" syntax sugar
p334
"delegate" calling convention in unmanaged world
p372

プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2011-04-02 16:21:05
md5:52e9cc8f9e487c53afbaf073448e17ac
sha1:da9a83eac89ca004c1b09fb848f3ce588df254ec
コメント
コメントを投稿するにはログインして下さい。