visual studio 2012 native debugger feature

35
Visual Studio 2012 Native Debugging かめがわ かずし

Upload: kazushi-kamegawa

Post on 28-May-2015

2.248 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Visual Studio 2012 Native Debugger Feature

Visual Studio 2012

Native Debugging かめがわ かずし

Page 2: Visual Studio 2012 Native Debugger Feature

2012/8/4時点のVisual Studio 2012 RCを

使用して検証しています。

製品版では異なる場合があります。

Page 3: Visual Studio 2012 Native Debugger Feature

先日超久しぶりにVisual Studio 2010で

STL使ってみたんですよ

Page 4: Visual Studio 2012 Native Debugger Feature

ソースそのものにはあまり意味がなく、ローカル変数ウィンドウに注目

Page 5: Visual Studio 2012 Native Debugger Feature

あれ?VS2010では

コンテナの中身が表示

されている?

Page 6: Visual Studio 2012 Native Debugger Feature

Visual Studio .NET 2003では

確かそんな機能なかった!

STLのメンバ変数にはアドレスしかなく、

メモリウィンドウから探した

Page 7: Visual Studio 2012 Native Debugger Feature

XP SP3

VC++2003を

Hyper-Vに

インストール

パッチ160個

かかった時間

プライスレス

Page 8: Visual Studio 2012 Native Debugger Feature

でもVisual Studio 2012(RC)は

そんなものじゃなかった!

Page 9: Visual Studio 2012 Native Debugger Feature

自己紹介 • かめがわ かずし

id:kkamegawa/@kkamegawa(twitter)/kkamegawa(FB)

• Microsoft MVP for Visual Studio ALM(2012/7~2013/6)

• @ITさんの連載

o いまさら聞けないWindows Serverの開発活用術 – 現在進行中

o Visual Studioデバッグ手法

o パフォーマンスチューニング 今日はこれ

Page 10: Visual Studio 2012 Native Debugger Feature

今日やること • Visual Studio 2012 Debuggerビジュアライズ機能の紹介

• GPUデバッグとC++AMP

Page 11: Visual Studio 2012 Native Debugger Feature

Visual Studio 2012 Debugger

新機能 コンパイラ/IDEも頑張った。

デバッガも頑張ってる。

Page 12: Visual Studio 2012 Native Debugger Feature

コンテナの中身を わかりやすく表示

• Visual Studio .NET 2003ではSTLコンテナの中身は表示されなかった(メンバ変数のアドレスのみ表示)

• Visual Studio 2010ではSTLのメンバ変数を展開する

Page 13: Visual Studio 2012 Native Debugger Feature

Visual Studio 2012は どっちもいける

「未加工ビュー」はメンバ変数をそのまま表示

通常はコンテナの中身が見えれば十分

Page 14: Visual Studio 2012 Native Debugger Feature

Visual Studio 2012では

このメンバ変数表示機能が

強力に!

Page 15: Visual Studio 2012 Native Debugger Feature

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

Page 16: Visual Studio 2012 Native Debugger Feature

Demo Natvisファイル使ってみよう!

Page 17: Visual Studio 2012 Native Debugger Feature

Natvisファイルの例

STLのコンテナのような構造ではメンバ変数の展開も

考慮する必要があります。

構造体(MyRectangle)

MyRectangle.Natvis

Page 18: Visual Studio 2012 Native Debugger Feature

実行結果 通常のローカルウィンドウ

MyRectangle.Natvisを適用した場合

Page 19: Visual Studio 2012 Native Debugger Feature

Natvisファイル解析例 失敗例

成功例

Natvisファイルの解析には少し時間がかかるので、

デバッグ開始から少し待つ

Page 20: Visual Studio 2012 Native Debugger Feature

Natvisファイルまとめ • デバッガ内でメンバ変数がビジュアライズされてうれしい。

• natvisファイルの解析完了メッセージがちょっと遅く表示されるけど気にしない(RC版)

• UTF-8のXMLなので、日本語もOK

• Natvisファイルを書き換えたとき、削除したときVisual Studioが読み直させるにはたぶん再起動必要。

• サンプルページのソリューション開けなかった… http://code.msdn.microsoft.com/Writing-type-visualizers-2eae77a2

Page 21: Visual Studio 2012 Native Debugger Feature

GPUデバッグ

Page 22: Visual Studio 2012 Native Debugger Feature

Visual Studio 2012の GPU活用機能

• C++ AMP(GPUを使った高速処理)のデバッグ支援

• DirectXシェーダーのデバッグ

• GPUの並列状態の可視化(TPL/PPLと同様) http://msdn.microsoft.com/ja-jp/library/01xdt7cs(v=vs.110).aspx

Page 23: Visual Studio 2012 Native Debugger Feature

C++ AMPってなに? • Visual Studio 2012 C++ネイティブコードの新機能

• GPUにGPUで行った方が早い処理を肩代わりさせる

• Visual Studio 2012 C++コンパイラー組み込みでGPUの違いを意識する必要がない

• 対応GPUが必要 プロセッサーグラフィックスでは使えないものがある

Page 24: Visual Studio 2012 Native Debugger Feature

Demo どのくらいGPUが早い場合があるか

Page 25: Visual Studio 2012 Native Debugger Feature

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エミュレーターになるので、超遅くなることがある

Page 26: Visual Studio 2012 Native Debugger Feature

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が含まれているので、ヘッドレスサーバーでも動く

Page 27: Visual Studio 2012 Native Debugger Feature

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

Page 28: Visual Studio 2012 Native Debugger Feature

サーバーでは? • サーバーでC++ AMPで使えるGPUが使えるかどうかはわからない(前述の方法で判定しておくなんて面倒)

• CI(自動ビルド/自動テスト)するとき動かない?

• そもそもローカルにC++ AMPで対象となるGPUが使えないんだけど?

Page 29: Visual Studio 2012 Native Debugger Feature

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固有の仕様を踏んでしまうようなものはダメ)

Page 30: Visual Studio 2012 Native Debugger Feature

C++ AMPデバッグ • 通常のデバッグと同じ感覚

• GPUでも競合が発生する。Visual Studio 2012では例外を検出する

Page 31: Visual Studio 2012 Native Debugger Feature

GPUメモリアクセス 例外検出

Page 32: Visual Studio 2012 Native Debugger Feature

対応GPUがローカルに ない場合

• リモートデバッガを使いましょう(以上終わり)

• リモートデバッガはVisual Studioのバージョン合わせないと動きません リモートデバッガはダウンロードセンターから入手可

• マネージドコードでは認証アカウントに注意 (アンマネージドコードでは無効にすることもできる)

• UIはちょっと違うけど、@ITで以前書いた記事もみてね http://www.atmarkit.co.jp/fdotnet/chushin/vsdebug_03/vsdebug_03_02.html

Page 33: Visual Studio 2012 Native Debugger Feature

Demo GPU状態表示

Page 35: Visual Studio 2012 Native Debugger Feature

ありがとうございました!