SlideShare a Scribd company logo
Visual Studio de Debug
かめがわ かずし(@kkamegawa)
自己紹介
 かめがわ かずし /会社員

 オンラインではkkamegawaというIDを使っています
  (twitter/hatena/Facebook/MSDN/Technet Forum)

 6/3が誕生日でした(このスライド作っていたら誕生日が…)

 @ITさんで連載やってます。
  いまさら聞けないWindows Serverの開発活用術 – 現在進行中
  Visual Studioデバッグ手法
  パフォーマンスチューニング                 今日はこれ
教えてください
 .NETアプリケーションのみで開発している
    (アンマネージド/ネイティブはほとんど使わない)

 アンマネージド/ネイティブのほうが圧倒的に多い
デバッグといえば?
 開発中にやるもの?

 単体テストで失敗したときにするもの?

 どっちかといえば本番環境で起きて調べられなくて困っていま
  せんか?
Visual studio de debug
今日のAgenda
 事後デバッグ
   Visual Studio 2012で強化されたIntelliTrace
   WER(Windows Error Reporting)の紹介

 ちょっと便利なデバッグ機能
  便利なWindowsのユーザーモードデバッグ支援機能
やらないこと
 ダンプ解析Howto

 カーネルモードデバッグ
Ultimateでしかつかえないけど強力

IntelliTrace
IntelliTraceとは
 Visual Studio 2010 Ultimateに搭載されている.NETアプリ
  ケーション向けヒストリカルデバッグ機能

 ヒストリカルデバッグとは、実行時に情報をキャプチャしておき、
  例外が起きた後からさかのぼって「その時何が起きていたの
  か」という情報を閲覧する

 @ITのこちらの記事も読んでね
  第2回 Visual Studio 2010の新機能「IntelliTrace」
  http://www.atmarkit.co.jp/fdotnet/chushin/vsdebug_02/vsd
  ebug_02_01.html
 Test Managerと組み合わせると開発者と評価担当者で
  IntelliTraceの情報を共有できる
 おまけ機能(?)も…
チームによるIntelliTrace運用
                                         失敗したテストを
                                     TestManagerで登録
 テスト結果を参照して                         (.itraceファイルも登録)
 .itraceファイルを開く



                     TFS +
                  Test Controller




                  .itraceファイル
                   (IntelliTrace)



                                    テスター
 開発者
※:画面はVisual Studio 2010英語版です
IntelliTraceのおまけ-Debugger Canvas
 いわゆるCode Bubble(関数単位でポップアップしていく)

 Visual Studioの拡張機能として提供される。
  2012/6/9時点でVisual Studio 2010 SP1のみ対応

 IntelliTraceの情報を参照することで実現されているので、残
  念ながらUltimateのみで使用可能。
Debugger Canvas
Visual Studio 2012のIntelliTrace強化
 IIS 7.0/7.5向けスタンドアロン版IntelliTrace Collectorが追加
  主に本番環境での採取可能にするため
  たった2MBのコンパクトサイズ。インストーラーすらない
  .NET Framework 3.5以降のプロジェクトが対象


 二種類のプロファイルを提供
  おおざっぱに取得するLow
  詳細に取得するHigh


 解析はVisual Studio Ultimateが必要
 PowerShellコマンドレットで制御可能
Visual Studio 2012のIntelliTrace Collector

Demo
IntelliTrace Collectorインストール
 IntelliTrace.exeを実行するとcabファイルが一つできる。

 Cabファイルをexpandコマンドで展開(Explorerだとフォルダ
  が認識されないので注意)
  C:¥temp>expand –f:* Intellitracecollection.cab
  D:¥IntelliTraceCollector
IntelliTrace Collector NTFS変更1
 保存先フォルダに管理者もしくはPowerShellコマンドレット実
  行する人のフルアクセスを付ける

 Collector展開先フォルダにアプリケーションプール実行ユー
  ザーの読み取りと実行を付ける

Microsoft.IntelliTrace.Profiler.11.0.0.SC.dllにアプリケー
 ションプール実行ユーザーの読み取りと実行を付ける

 x64向けアセンブリは展開先のx64フォルダ内にある
IntelliTrace Collector NTFS変更(実例)
 DefaultAppPoolのユーザーにIntelliTraceCollectorが格納さ
  れているC:¥IntelliTraceCollectorに対して読み取りと実行を
  許す例
  c:¥>icacls C:¥IntelliTraceCollector /grant "IIS
  APPPOOL¥DefaultAppPool":(RX)

 DefaultAppPoolのユーザーにC:¥IntelliTraceDataフォルダ
  にログデータの書き込みを許す例
  c:¥>icacls C:¥IntelliTraceData /grant "IIS
  APPPOOL¥DefaultAppPool":(F)
PowerShellコマンドレット準備
 PowerShellを追加していない環境はないはずなので略
  (同様にSet-ExecutionPolicyも略)

 x64のログ採取をするときはx64用PowerShell。アプリケー
  ションプールをx86に設定したASP.NETアプリケーションのロ
  グ採取をするときはPowerShell (x86)を「管理者として起動」

 Microsoft.VisualStudio.IntelliTrace.PowerShell.dllをimport
  する
  PS>import-module
  <IntelliTraceCollector>Microsoft.VisualStudio.IntelliTrace.
  PowerShell.dll
PowerShellで採取
 ログ採取開始
  PS>Start-IntelliTraceCollection <アプリケーションプール名
  > <プラン名> <IntelliTraceログ出力先>

 スナップショット採取
  PS>Checkpoint-IntellitraceCollection <アプリケーション
  プール名>

 停止
  PS>Stop-IntelliTraceCollection <アプリケーションプール名
  >

 拡張子iTraceファイルが指定フォルダにできているので、
  Visual Studioで開く
IntelliTrace Collectorの注意点
 とりすぎ注意。IntelliTraceの採取対象モジュールを絞る
  たとえばレジストリアクセスなどは採取しない
  Lowで15%程度の性能低下
  Highでは広範囲に採取するため、かなり低下する
  採取プラン(xmlファイルで定義)のカスタマイズほぼ必須。

 アプリケーションプールで共有されているアプリに対して有効
  なので、複数のアプリケーションが共有している場合、対象の
  アプリケーションのみアプリケーションプールを分ける

 IntelliTraceのログ上限を小さくする(デフォルト100MB)

 SSDがあるならSSDを出力先にする
ちょっと変わったプログラムのデバッグ時に知っておくと便利ですよ

Windowsのデバッグ支援機能
Windows Error Reporting(参考)
 WER(Windows Error Reporting)の標準設定ではMicrosoftの
  サーバーに特定の情報が送られて、解析される。
  http://www.atmarkit.co.jp/ad/ms/msimpsbl0608/miimpsbl02/mii
  mpsbl02.html
  システム・エラーと闘う人々
  http://msdn.microsoft.com/ja-
  jp/library/windows/hardware/gg487468.aspx
  WER がエラー報告を収集して分類するしくみ

 MSに送らず、組織内ダンプ&クラッシュ情報を集める設定もできる
  よ!(有償だとSCOM 2007が対応)
  http://technet.microsoft.com/ja-jp/library/cc540375.aspx
 WERプロトコルは公開されているので、がんばれば作れる。
  http://msdn.microsoft.com/en-
  us/library/dd942170%28PROT.10%29.aspx
自分のプログラムのダンプがほしい
 WERのレジストリを設定する(詳細)
  http://msdn.microsoft.com/en-
  us/library/bb513638%28VS.85%29.aspx
  WER Settings

 ユーザーモードダンプを構成する
  http://msdn.microsoft.com/en-
  us/library/windows/desktop/bb787181(v=vs.85).aspx
  Collecting User-mode Dumps

 以下のレジストリキーを追加するだけ
 で%LOCALAPPDATA%CrashDumpsに生成される

 HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Wind
 ows¥Windows Error Reporting¥LocalDumps
使うとさらに便利です

Windows Debugging Hook
必要なもの
 Debugging Tools for Windows
  通常Windows SDKに付属、もしくは単体でインストール
  http://msdn.microsoft.com/ja-
  jp/windows/hardware/gg463009.aspx
 インストールするとGlobal Flagsというアプリケーションが追
  加されます。
複数のプロセスを同時に起動する
 AとBというプロジェクトがあって、Bのデバッグを行う際にAも
  起動している必要があるだけならVisual Studioのマルチス
  タートアップ プロジェクトを使ってデバッグすればいい
他プロセスの状態に依存するとき
 そうではなくて、ほかのプロセスが不定なタイミングで起動す
  る(引数やデータベース、メモリの状態など)場合。


           どれが起動され
           るかわからない


                     B.EXE
   A.EXE                     これをデバッグ
                               したい
                     C.EXE


                     D.EXE


    DB
そこでGlobal Flag
 Image(exe名)
 Debuggerにチェック
 隣にデバッガのパス
 無効にするときは
  Debuggerのチェックを
  はずす
もう一つの方法
 レジストリ編集する
  HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Wind
  ows NT¥CurrentVersion¥Image File Execution Options

 この下に対象のプログラム名のキーを作成する。メモ帳なら
  notepad.exe

 キー内に以下の設定で作る
  名前:Debugger
  データ型:REG_SZ
  データ:デバッガのフルパスと起動引数

 Global Flagで設定できない時などにどうぞ。
DLLが呼ばれた時に止める
 exeから任意のタイミングで呼び出されるDLL
  典型的にはDLLとして提供するサービス
  特定のソフトウェアのプラグインを作った場合


 前と同じレジストリ編集
  HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Wind
  ows NT¥CurrentVersion¥Image File Execution Options

 DLL名をキーとして作る(hogehoge.dll)
  名前:BreakOnDllLoad
  データ型:REG_DWORD
  データ:1
あれ?サービスって…
 一定期間(30秒)応答ないとエラーになるよね?

 デバッグはOutputDebugString()でサービス版printf()?


 レジストリでタイムアウト設定すれば回避可能です
  (Windows 7では作ってください)
 キー:HKEY_LOCAL_MACHINE¥System¥CurrentControlSet¥C
 ontrol
 データ:ServicesPipeTimeout
 データ型:REG_DWORD
 値:ミリ秒
 デバッグ以外でも起動が遅いサービス(RDBMS)でも有効
  (Service Control Managerのイベント7000/7011が出るとき)
まとめ
 IntelliTrace(Collector)はマネージドコードのみ、さらには
  Ultimateエディションのみだが便利。特に今まで「本番環境
  じゃないと起きないけど、目星が大体ついている」というときな
  どに使ってください

 Visual Studio以外にもたしなみとして、Debugging Tools for
  Windowsに含まれるものは知っておいた方がいいです

 Global Flagは乗りこなせばネイティブヒープのメモリリークも
  わかるので、これを機会におぼえてみてください!
参考資料
 Special Thanks Edtter
  http://edtter.codeplex.com/

 Inside Windows Debugging
  http://shop.oreilly.com/product/0790145335500.do

 Windows Internals 6th Part1
  http://shop.oreilly.com/product/0790145305930.do
Visual studio de debug

More Related Content

PPT
Eclipse を使った java 開発 111126 杉浦
PPT
PHP agile test tips
PDF
PowerShell and Release Management Server
PDF
Eclipseデバッガを活用するための31のtips
PPTX
Bat vb script_power_shellの単体テスト自動化
PPTX
EclipseでのデバッグTips
PPTX
13016 n分で作るtype scriptでnodejs
KEY
プラガブル Play20 Scala
Eclipse を使った java 開発 111126 杉浦
PHP agile test tips
PowerShell and Release Management Server
Eclipseデバッガを活用するための31のtips
Bat vb script_power_shellの単体テスト自動化
EclipseでのデバッグTips
13016 n分で作るtype scriptでnodejs
プラガブル Play20 Scala

What's hot (20)

KEY
Play勉強会 第3回
PDF
TDD勉強会キックオフ for Java
PPTX
App extensionでテストコードを書く
PDF
テストを書こう、Unity編
PDF
書こう! 使おう! 単体テスト
PDF
書こう! 使おう! 単体テスト
PPTX
HeapStats(Java解析ツールバトル)
PPTX
Andoird版OpenCVのJavaサンプルを動かす
PDF
Java SE 9の紹介: モジュール・システムを中心に
PDF
System4 comment
PDF
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
PDF
秋だからEclipse再入門
PDF
Visual Studio Code #phpcon2015
PPTX
継続的インテグレーション3分クッキング
PDF
最近の PowerShell のお話
PDF
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
PDF
Driverについて
PPTX
Selenium
PDF
Windowsでhaskell
PDF
Behatで行う、E2Eテスト入門
Play勉強会 第3回
TDD勉強会キックオフ for Java
App extensionでテストコードを書く
テストを書こう、Unity編
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト
HeapStats(Java解析ツールバトル)
Andoird版OpenCVのJavaサンプルを動かす
Java SE 9の紹介: モジュール・システムを中心に
System4 comment
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
秋だからEclipse再入門
Visual Studio Code #phpcon2015
継続的インテグレーション3分クッキング
最近の PowerShell のお話
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
Driverについて
Selenium
Windowsでhaskell
Behatで行う、E2Eテスト入門
Ad

Similar to Visual studio de debug (20)

PDF
Windows PowerShell 5.0 と Windows Server vNext の管理
PDF
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
PDF
デスクトップ アプリ開発における Visual Studio の進化
PDF
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
PDF
Visual Studio 2012 Native Debugger Feature
PPTX
Windows Azure PHP Tips
PDF
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
PDF
DEV-004_ここを使うだけで、大幅に業務効率改善! Visual Studio 2015 update 2 の最新便利機能をピックアップ
PDF
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
PDF
もろもろの AI ツールを Windows のローカル環境にインストールする手順
PPTX
Windows Phone 7はじめました
PDF
Windows PowerShell 2.0 の基礎知識
PDF
Build 番号の自動更新スクリプトについて #cocoa_kansai
PPTX
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
PDF
Code igniterでテスト駆動開発 資料作成中
PPTX
Appsody でnodejsのアプリを立ち上げよう!
PDF
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
PDF
DEV-001_オープンソース エディタ Visual Studio Code の極意
PDF
Windowsストアアプリ開発 オープンセミナー広島
PDF
.NET アプリを改善して実践する継続的インテグレーション
Windows PowerShell 5.0 と Windows Server vNext の管理
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
デスクトップ アプリ開発における Visual Studio の進化
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
Visual Studio 2012 Native Debugger Feature
Windows Azure PHP Tips
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
DEV-004_ここを使うだけで、大幅に業務効率改善! Visual Studio 2015 update 2 の最新便利機能をピックアップ
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
もろもろの AI ツールを Windows のローカル環境にインストールする手順
Windows Phone 7はじめました
Windows PowerShell 2.0 の基礎知識
Build 番号の自動更新スクリプトについて #cocoa_kansai
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Code igniterでテスト駆動開発 資料作成中
Appsody でnodejsのアプリを立ち上げよう!
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
DEV-001_オープンソース エディタ Visual Studio Code の極意
Windowsストアアプリ開発 オープンセミナー広島
.NET アプリを改善して実践する継続的インテグレーション
Ad

More from Kazushi Kamegawa (20)

PDF
「何もしないのにCIが失敗した」を防ぐ
PDF
Ignite 2021秋 recap - 開発者向け新機能紹介
PDF
Azure boards for beginners
PDF
Deploy Strategy with Azure Pipelines
PDF
DevOps and compliance and security
PDF
DevOps and Compliance and Security
PDF
Ignite 2021 振り返り(DevOps)
PDF
How to create your own Azure Pipeline's image
PDF
NET5 and Diagnostics
PDF
Azure DevOps入門~TechLab編
PDF
Introduce TFSUG and Azure DevOps Server 2020
PDF
Azure DevOps Online Vol.3 - Inside Azure Pipelines
PDF
Getting Start for Azure Pipelines
PDF
Azure Boards and Azure Test Plans inside out.
PDF
Azure DevOps's security
PDF
Azure DevOps Management in Organization
PPTX
What's new Azure DevOps in //Build 2019
PPTX
Deploy to Azure by ??? Azure Repos or GitHub
PDF
Azure DevOpsとセキュリティ
PPTX
What's Azure DevOps
「何もしないのにCIが失敗した」を防ぐ
Ignite 2021秋 recap - 開発者向け新機能紹介
Azure boards for beginners
Deploy Strategy with Azure Pipelines
DevOps and compliance and security
DevOps and Compliance and Security
Ignite 2021 振り返り(DevOps)
How to create your own Azure Pipeline's image
NET5 and Diagnostics
Azure DevOps入門~TechLab編
Introduce TFSUG and Azure DevOps Server 2020
Azure DevOps Online Vol.3 - Inside Azure Pipelines
Getting Start for Azure Pipelines
Azure Boards and Azure Test Plans inside out.
Azure DevOps's security
Azure DevOps Management in Organization
What's new Azure DevOps in //Build 2019
Deploy to Azure by ??? Azure Repos or GitHub
Azure DevOpsとセキュリティ
What's Azure DevOps

Visual studio de debug