Visual Studio 2012Native Debugging      かめがわ かずし
2012/8/4時点のVisual Studio 2012 RCを      使用して検証しています。  製品版では異なる場合があります。
先日超久しぶりにVisual Studio 2010で   STL使ってみたんですよ
ソースそのものにはあまり意味がなく、ローカル変数ウィンドウに注目
あれ?VS2010ではコンテナの中身が表示  されている?
Visual Studio .NET 2003では確かそんな機能なかった!    STLのメンバ変数にはアドレスしかなく、        メモリウィンドウから探した
XP SP3VC++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さんの...
今日やること• 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%¥Com...
DemoNatvisファイル使ってみよう!
Natvisファイルの例構造体(MyRectangle)MyRectangle.Natvis          STLのコンテナのような構造ではメンバ変数の展開も                 考慮する必要があります。
実行結果通常のローカルウィンドウMyRectangle.Natvisを適用した場合
Natvisファイル解析例失敗例成功例       Natvisファイルの解析には少し時間がかかるので、                デバッグ開始から少し待つ
Natvisファイルまとめ• デバッガ内でメンバ変数がビジュアライズされてうれしい。• natvisファイルの解析完了メッセージがちょっと遅く表示されるけど  気にしない(RC版)• UTF-8のXMLなので、日本語もOK• Natvisファイ...
GPUデバッグ
Visual Studio 2012の         GPU活用機能• C++ AMP(GPUを使った高速処理)のデバッグ支援• DirectXシェーダーのデバッグ• GPUの並列状態の可視化(TPL/PPLと同様)  http://msdn...
C++ AMPってなに?• Visual Studio 2012 C++ネイティブコードの新機能• GPUにGPUで行った方が早い処理を肩代わりさせる• Visual Studio 2012 C++コンパイラー組み込みでGPUの違い  を意識す...
DemoどのくらいGPUが早い場合があるか
C++ AMP対応GPU• ディスクリードGPU(nVidiaやAMDの単体GPU)はOK• 第二世代(Sandy Bridge)Intel Core iプロセッサはNG  (Core i3-2100T/Windows Server 2008 ...
C++ AMPチェック方法• PPL Teamのblogからverifyampdevices.exeをダウンロードし  て実行(特権昇格不要)  http://blogs.msdn.com/b/nativeconcurrency/archive...
WindowsServer 2008 R2 SP1Core i3-2100TWindows 7 SP1nVidia GTX 550iWindows 8 RPnVidia GeForce 610WindowsServer 2012 RCCore ...
サーバーでは?• サーバーでC++ AMPで使えるGPUが使えるかどうかはわか  らない(前述の方法で判定しておくなんて面倒)• CI(自動ビルド/自動テスト)するとき動かない?• そもそもローカルにC++ AMPで対象となるGPUが使えないん...
C++AMP動作まとめ• Windows Server でも動く。Windows Server 2008 R2はGPU  次第• Windows Server 2012では特にMicrosoft Basic Render  Driverのおかげ...
C++ AMPデバッグ• 通常のデバッグと同じ感覚• GPUでも競合が発生する。Visual Studio 2012では例外を検  出する
GPUメモリアクセス   例外検出
対応GPUがローカルに        ない場合• リモートデバッガを使いましょう(以上終わり)• リモートデバッガはVisual Studioのバージョン合わせないと  動きません  リモートデバッガはダウンロードセンターから入手可• マネージ...
DemoGPU状態表示
参考資料• PPL(Parallel Programming Library) TeamのBlog  http://blogs.msdn.com/b/nativeconcurrency/• MSDN Library  Debugging in ...
ありがとうございました!
Upcoming SlideShare
Loading in …5
×

Visual Studio 2012 Native Debugger Feature

2,907 views

Published on

Visual Studio 2012 RC New Feature for Native Debugger.C++ AMP,debugger visualizer.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,907
On SlideShare
0
From Embeds
0
Number of Embeds
915
Actions
Shares
0
Downloads
5
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Visual Studio 2012 Native Debugger Feature

  1. 1. Visual Studio 2012Native Debugging かめがわ かずし
  2. 2. 2012/8/4時点のVisual Studio 2012 RCを 使用して検証しています。 製品版では異なる場合があります。
  3. 3. 先日超久しぶりにVisual Studio 2010で STL使ってみたんですよ
  4. 4. ソースそのものにはあまり意味がなく、ローカル変数ウィンドウに注目
  5. 5. あれ?VS2010ではコンテナの中身が表示 されている?
  6. 6. Visual Studio .NET 2003では確かそんな機能なかった! STLのメンバ変数にはアドレスしかなく、 メモリウィンドウから探した
  7. 7. XP SP3VC++2003を Hyper-Vにインストールパッチ160個かかった時間プライスレス
  8. 8. でもVisual Studio 2012(RC)は そんなものじゃなかった!
  9. 9. 自己紹介• かめがわ かずし id:kkamegawa/@kkamegawa(twitter)/kkamegawa(FB)• Microsoft MVP for Visual Studio ALM(2012/7~2013/6)• @ITさんの連載 o いまさら聞けないWindows Serverの開発活用術 – 現在進行中 o Visual Studioデバッグ手法 o パフォーマンスチューニング 今日はこれ
  10. 10. 今日やること• Visual Studio 2012 Debuggerビジュアライズ機能の紹介• GPUデバッグとC++AMP
  11. 11. Visual Studio 2012 Debugger 新機能 コンパイラ/IDEも頑張った。 デバッガも頑張ってる。
  12. 12. コンテナの中身を わかりやすく表示• Visual Studio .NET 2003で はSTLコンテナの中身は表 示されなかった(メンバ変数 のアドレスのみ表示)• Visual Studio 2010ではSTL のメンバ変数を展開する
  13. 13. Visual Studio 2012は どっちもいける 通常はコンテナの中身が見えれば十分「未加工ビュー」はメンバ変数をそのまま表示
  14. 14. Visual Studio 2012ではこのメンバ変数表示機能が 強力に!
  15. 15. 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
  16. 16. DemoNatvisファイル使ってみよう!
  17. 17. Natvisファイルの例構造体(MyRectangle)MyRectangle.Natvis STLのコンテナのような構造ではメンバ変数の展開も 考慮する必要があります。
  18. 18. 実行結果通常のローカルウィンドウMyRectangle.Natvisを適用した場合
  19. 19. Natvisファイル解析例失敗例成功例 Natvisファイルの解析には少し時間がかかるので、 デバッグ開始から少し待つ
  20. 20. Natvisファイルまとめ• デバッガ内でメンバ変数がビジュアライズされてうれしい。• natvisファイルの解析完了メッセージがちょっと遅く表示されるけど 気にしない(RC版)• UTF-8のXMLなので、日本語もOK• Natvisファイルを書き換えたとき、削除したときVisual Studioが読 み直させるにはたぶん再起動必要。• サンプルページのソリューション開けなかった… http://code.msdn.microsoft.com/Writing-type-visualizers- 2eae77a2
  21. 21. GPUデバッグ
  22. 22. Visual Studio 2012の GPU活用機能• C++ AMP(GPUを使った高速処理)のデバッグ支援• DirectXシェーダーのデバッグ• GPUの並列状態の可視化(TPL/PPLと同様) http://msdn.microsoft.com/ja- jp/library/01xdt7cs(v=vs.110).aspx
  23. 23. C++ AMPってなに?• Visual Studio 2012 C++ネイティブコードの新機能• GPUにGPUで行った方が早い処理を肩代わりさせる• Visual Studio 2012 C++コンパイラー組み込みでGPUの違い を意識する必要がない• 対応GPUが必要 プロセッサーグラフィックスでは使えないものがある
  24. 24. DemoどのくらいGPUが早い場合があるか
  25. 25. 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エミュレーターになるので、 超遅くなることがある
  26. 26. 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が含まれているので、ヘッドレスサーバーでも 動く
  27. 27. WindowsServer 2008 R2 SP1Core i3-2100TWindows 7 SP1nVidia GTX 550iWindows 8 RPnVidia GeForce 610WindowsServer 2012 RCCore i5-3450T
  28. 28. サーバーでは?• サーバーでC++ AMPで使えるGPUが使えるかどうかはわか らない(前述の方法で判定しておくなんて面倒)• CI(自動ビルド/自動テスト)するとき動かない?• そもそもローカルにC++ AMPで対象となるGPUが使えないん だけど?
  29. 29. 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固有の仕様を踏んでしまうようなものはダメ)
  30. 30. C++ AMPデバッグ• 通常のデバッグと同じ感覚• GPUでも競合が発生する。Visual Studio 2012では例外を検 出する
  31. 31. GPUメモリアクセス 例外検出
  32. 32. 対応GPUがローカルに ない場合• リモートデバッガを使いましょう(以上終わり)• リモートデバッガはVisual Studioのバージョン合わせないと 動きません リモートデバッガはダウンロードセンターから入手可• マネージドコードでは認証アカウントに注意 (アンマネージドコードでは無効にすることもできる)• UIはちょっと違うけど、@ITで以前書いた記事もみてね http://www.atmarkit.co.jp/fdotnet/chushin/vsdebug_03/vsd ebug_03_02.html
  33. 33. DemoGPU状態表示
  34. 34. 参考資料• 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)
  35. 35. ありがとうございました!

×