visual studio 2012 native debugger feature
DESCRIPTION
Visual Studio 2012 RC New Feature for Native Debugger.C++ AMP,debugger visualizer.TRANSCRIPT
Visual Studio 2012
Native Debugging かめがわ かずし
2012/8/4時点のVisual Studio 2012 RCを
使用して検証しています。
製品版では異なる場合があります。
先日超久しぶりにVisual Studio 2010で
STL使ってみたんですよ
ソースそのものにはあまり意味がなく、ローカル変数ウィンドウに注目
あれ?VS2010では
コンテナの中身が表示
されている?
Visual Studio .NET 2003では
確かそんな機能なかった!
STLのメンバ変数にはアドレスしかなく、
メモリウィンドウから探した
XP SP3
VC++2003を
Hyper-Vに
インストール
パッチ160個
かかった時間
プライスレス
でもVisual Studio 2012(RC)は
そんなものじゃなかった!
自己紹介 • かめがわ かずし
id:kkamegawa/@kkamegawa(twitter)/kkamegawa(FB)
• Microsoft MVP for Visual Studio ALM(2012/7~2013/6)
• @ITさんの連載
o いまさら聞けないWindows Serverの開発活用術 – 現在進行中
o Visual Studioデバッグ手法
o パフォーマンスチューニング 今日はこれ
今日やること • Visual Studio 2012 Debuggerビジュアライズ機能の紹介
• GPUデバッグとC++AMP
Visual Studio 2012 Debugger
新機能 コンパイラ/IDEも頑張った。
デバッガも頑張ってる。
コンテナの中身を わかりやすく表示
• Visual Studio .NET 2003ではSTLコンテナの中身は表示されなかった(メンバ変数のアドレスのみ表示)
• Visual Studio 2010ではSTLのメンバ変数を展開する
Visual Studio 2012は どっちもいける
「未加工ビュー」はメンバ変数をそのまま表示
通常はコンテナの中身が見えれば十分
Visual Studio 2012では
このメンバ変数表示機能が
強力に!
Natvisファイルを使った デバッガビジュアライズ
• 拡張子Natvisファイル(中身はxml)を指定のフォルダに置けばネイティブの型情報を展開してくれる。
• 解析優先順位は以下の通り o %VSINSTALLDIR%¥Common7¥Packages¥Debugger¥Visualizers (昇格必須) o %USERPROFILE%¥Documents¥Visual Studio 2012¥Visualizers o VS extension folders
• 最優先のcommon7フォルダ配下にはデフォルトのファイルがある
(Windows/MFC/ATL/Concurrency/STL/WinRT)。
• ファイルの解析結果を表示させるにはレジストリにDWORDのEnableNatvisDiagnosticsを作り、1を指定すると出力ウィンドウに表示される HKEY_CURRENT_USER¥Software¥Microsoft¥VisualStudio¥11.0_Config¥Debugger
Demo Natvisファイル使ってみよう!
Natvisファイルの例
STLのコンテナのような構造ではメンバ変数の展開も
考慮する必要があります。
構造体(MyRectangle)
MyRectangle.Natvis
実行結果 通常のローカルウィンドウ
MyRectangle.Natvisを適用した場合
Natvisファイル解析例 失敗例
成功例
Natvisファイルの解析には少し時間がかかるので、
デバッグ開始から少し待つ
Natvisファイルまとめ • デバッガ内でメンバ変数がビジュアライズされてうれしい。
• natvisファイルの解析完了メッセージがちょっと遅く表示されるけど気にしない(RC版)
• UTF-8のXMLなので、日本語もOK
• Natvisファイルを書き換えたとき、削除したときVisual Studioが読み直させるにはたぶん再起動必要。
• サンプルページのソリューション開けなかった… http://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2
GPUデバッグ
Visual Studio 2012の GPU活用機能
• C++ AMP(GPUを使った高速処理)のデバッグ支援
• DirectXシェーダーのデバッグ
• GPUの並列状態の可視化(TPL/PPLと同様) http://msdn.microsoft.com/ja-jp/library/01xdt7cs(v=vs.110).aspx
C++ AMPってなに? • Visual Studio 2012 C++ネイティブコードの新機能
• GPUにGPUで行った方が早い処理を肩代わりさせる
• Visual Studio 2012 C++コンパイラー組み込みでGPUの違いを意識する必要がない
• 対応GPUが必要 プロセッサーグラフィックスでは使えないものがある
Demo どのくらいGPUが早い場合があるか
C++ AMP対応GPU • ディスクリードGPU(nVidiaやAMDの単体GPU)はOK
• 第二世代(Sandy Bridge)Intel Core iプロセッサはNG (Core i3-2100T/Windows Server 2008 R2)
• 第三世代(Ivy Bridge)Intel Core iプロセッサはOK (Core i5-3450T/Windows Server 2012 RC)
• Vmware PlayerはNG
• 現時点ではデバッガ実行すると、GPUエミュレーターになるので、超遅くなることがある
C++ AMPチェック方法 • PPL Teamのblogからverifyampdevices.exeをダウンロードして実行(特権昇格不要) http://blogs.msdn.com/b/nativeconcurrency/archive/2011/09/22/can-i-run-c-amp-on-my-device.aspx
• Windows 8やWindows Server 2012ではMicrosoft Basic Render Driverが含まれているので、ヘッドレスサーバーでも動く
Windows
Server 2012 RC
Core i5-3450T
Windows
Server 2008 R2 SP1
Core i3-2100T
Windows 7 SP1
nVidia GTX 550i
Windows 8 RP
nVidia GeForce 610
サーバーでは? • サーバーでC++ AMPで使えるGPUが使えるかどうかはわからない(前述の方法で判定しておくなんて面倒)
• CI(自動ビルド/自動テスト)するとき動かない?
• そもそもローカルにC++ AMPで対象となるGPUが使えないんだけど?
C++AMP動作まとめ • Windows Server でも動く。Windows Server 2008 R2はGPU次第
• Windows Server 2012では特にMicrosoft Basic Render DriverのおかげでGPUがないものでも動く(CI時に使える)
• Windows 7/Windows Server 2008 R2ではSession 0(サービス用セッション)では動くとは言わないけど、大体動く(DirectXがSession 0固有の仕様を踏んでしまうようなものはダメ)
C++ AMPデバッグ • 通常のデバッグと同じ感覚
• GPUでも競合が発生する。Visual Studio 2012では例外を検出する
GPUメモリアクセス 例外検出
対応GPUがローカルに ない場合
• リモートデバッガを使いましょう(以上終わり)
• リモートデバッガはVisual Studioのバージョン合わせないと動きません リモートデバッガはダウンロードセンターから入手可
• マネージドコードでは認証アカウントに注意 (アンマネージドコードでは無効にすることもできる)
• UIはちょっと違うけど、@ITで以前書いた記事もみてね http://www.atmarkit.co.jp/fdotnet/chushin/vsdebug_03/vsdebug_03_02.html
Demo GPU状態表示
参考資料 • PPL(Parallel Programming Library) TeamのBlog
http://blogs.msdn.com/b/nativeconcurrency/
• MSDN Library Debugging in Visual Studio 2012 http://msdn.microsoft.com/ja-jp/library/sc65sadd(v=vs.110)
ありがとうございました!