ハードコア デバッギング : サポート直伝!
運用中 Windows アプリケーション バグバス
ター!!
AC12
ハードコア デバッギング : サポート直伝!
運用中 Windows アプリケーション バグバスター!!
AC12
1. 本セッションの位置づけ
2. 本日のお品書き
3. 注意事項
ハードコア デバッギング : サポート直伝!
運用中 Windows アプリケーション バグバスター!!
AC12
1. 本セッションの位置づけ
2. 本日のお品書き
3. 注意事項
本セッションの位置づけ
運用中アプリの
ダンプやトレース解析
本セッションの位置づけ
デバッグ エキスパートに必要なス
キル
プログラミング
言語OS と環境の理
解
CPU の理解
テクノロジーと
ツール
Lv MAX
ヘンタイによる、ヘンタイの為のセッション
本セッションの位置づけ - だから面白
い!!
エキスパー
ト
エキスパー
ト
考えるな、
本セッションの位置づけ
感じろ。
ハードコア デバッギング : サポート直伝!
運用中 Windows アプリケーション バグバスター!!
AC12
1. 本セッションの位置づけ
2. 本日のお品書き
3. 注意事項
本セッションの位置づけ
デバッグ エキスパートに必要なス
キル
プログラミング
言語OS と環境の理
解
CPU の理解
テクノロジーと
ツール
本日のお品書き
早川 冷(レン)
応急処置タイムトラ
ベルTTD Detour
ハードコア デバッギング : サポート直伝!
運用中 Windows アプリケーション バグバスター!!
AC12
1. 本セッションの位置づけ
2. 本日のお品書き
3. 注意事項
注意事項
悪用厳禁!
メモは不
要!
注意事項
注意事項
あたたかく見守っ
て!
新しい WinDbg による
Time Travel Debugging (TTD) のご紹
介
AC12
新しくなった WinDbg で
アプリの問題を 2 分で解
決!
対象 : C++ 17 の <Filesystem> を使ったファイル列挙
ウォーミング アップ!
お気づきでしょうか?
お気づきでしょうか?
新しい WinDbg では
過去の処理を遡って
デバッグできます!!
• WinDbg がリニューアル!
本セッションでお伝えしたいこと
• WinDbg がリニューアル!
• 超強力な新機能 “TTD” を搭載!
本セッションでお伝えしたいこと
• WinDbg がリニューアル!
• 超強力な新機能 “TTD” を搭載!
• 現場のトラブルシュートでぜひ活用し
てください!
本セッションでお伝えしたいこと
本セッションの流れ
1. TTD の概要 (ダンプ解析との比較)
2. 導入・トレースの採取
3. よく使うコマンド
4. TTD が威力を発揮するケース
1. TTD の概要 (ダンプ解析との比較)
2. 導入・トレースの採取
3. よく使うコマンド
4. TTD が威力を発揮するケース
これまでのダンプ解析は、、、
これまでのダンプ解析は、、、
これまでのダンプ解析は、、、
これまでのダンプ解析は、、、
でもこれからは、
これからは Time Travel Debugging !
これからは Time Travel Debugging !
これからは Time Travel Debugging !
これからは Time Travel Debugging !
これからは Time Travel Debugging !
1. TTD の概要 (ダンプ解析との比較)
2. 導入・トレースの採取
3. よく使うコマンド
4. TTD が威力を発揮するケース
入手方法 : Microsoft Store から
対象アプリ : C/C++ および .NET Framework
トレースの採取方法 (1) : ツールをアタッチ
して起動
トレースの採取方法 (2) : 起動中のアプリに
アタッチ
採取期間は任意
トレース ファイル : .run と .idx
1. TTD の概要 (ダンプ解析との比較)
2. 導入・トレースの採取
3. よく使うコマンド
4. TTD が威力を発揮するするケース
従来の WinDbg コマンドはそのまま利用可
能
- 後ろ向きに
- 後ろ向きに
- 後ろ向きに
- 前の
- 前の
新しい WinDbg で追加された TTD 用コマン
ド
• sxe ld
• sxe ct
• sxe et
• sxe
• sxr
イベント発生時にブレークさせるコマンド
bp
bp
bm
ba
ba
ブレークポイントを設定するコマンド (1 /
4)
!sos.name2ee <モジュール名>!<クラス名>.<メソッ
ド名>
bp
ブレークポイントを設定するコマンド (2 /
4)
!sos.dumpdomain
!sos.dumpmodule –mt <module>
!sos.name2ee
!sos.dumpmt -md <MethodTable>
!sos.dumpmd <MethodDescriptor>
ブレークポイントを設定するコマンド (3 /
4)
bp
ブレークポイントを設定するコマンド (4 /
4)
1. TTD の概要 (ダンプ解析との比較)
2. 導入・トレースの採取
3. よく使うコマンド
4. TTD が威力を発揮するケース
• すると、ログの一部が欠落していることが判明
(>_<)
• まずはログの問題を急ぎ調査することに、、、
• ログ出力には社内標準ライブラリを使用していて中
身はよくわからない
Q : どうやって調査しますか?
Q : どうやって調査しますか?
2018/05/23 12:34:56 (重要)
アプリケーションでパフォーマンス異常が検出されました。システムの
CPU 使用率は 85.0 %、メモリの空き領域は 1,352 MByte、TCPv4 の接続
数は 952 です。
2018/05/23 12:34:56 ()
アプリケーションでパフォーマンス異常が検出されました。システムの
CPU 使用率は 0 %、メモリの空き領域は 0 MByte、TCPv4 の接続数は 0
です。
調査を難しくする要因
Demo :
悩ましい問題を TTD で解決!
ダンプ解析が難しい問題も
TTD で一気に解決できます!!!
関数にブレークポイントを張り、
どんどん処理を遡って解析できます!
• WinDbg がリニューアル!
• 超強力な新機能 “TTD” を搭載!
• 現場のトラブルシュートでぜひ活用し
てください!
最後にもう一度 : 本セッションでお伝えし
たいこと
Time Travel Debugging – Overview
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/time-travel-debugging-
overview
Debugging Using WinDbg Preview
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugging-using-windbg-
preview
Debugger Reference
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-reference
Overview of x64 Calling Conventions
https://docs.microsoft.com/en-us/cpp/build/overview-of-x64-calling-conventions
SOS.dll (SOS Debugging Extension)
https://docs.microsoft.com/en-us/dotnet/framework/tools/sos-dll-sos-debugging-extension
参考資料
Detours - 迂回
アプリで問題発生したら・・・
ダンプを取る
トレースを取る
アプリで問題発生したら・・・
トレースを取る
そこで・・・
Detours
Detours - 本日の内容
Detours を知
る!
Detours を使う!
Detours を知る!
Detours を知
る!
1. ここが凄い!
2. フックの仕組
み
3. SDK の中身
Detours を知る! - 1. ここが凄い!
Detours を知
る!
1. ここが凄い!
2. フックの仕組
み
3. SDK の中身
Detours を知る! - 1. ここが凄い!
【祝】 無料
!
https://github.com/Microsoft/Detours
Detours を知る! - 1. ここが凄い!
すべての関数を簡単にフック
フックの中でトレースを実装
フックの中で関数の動作を変更可能
Detours を知る! - 2. フックの仕組み
Detours を知
る!
1. ここが凄い!
2. フックの仕組
み
3. SDK の中身
Detours を知る! - 2. フックの仕組み
呼び出し元
ターゲット関
数
呼び出し元 呼び出し元
パターン 1 パターン 2
ターゲット関
数
ターゲット関
数
Detour 関数 Detour 関数
Detours を知る! - 3. SDK の中身
Detours を知
る!
1. ここが凄い!
2. フックの仕組
み
3. SDK の中身
WithDll / SetDll
Detours を知る! - 3. SDK の中身
•ソース
コード
•サンプル
Detours SDK そのまま使えるサンプル
TrcApi64 / TrcApi32
Detours - 本日の内容
Detours を知
る!
Detours を使う!
Detours を使う!
Detours を使う!
1. トレースを取
る
2. トレースを診
る
運用環境でアプリが!! 現場に急行せ
よ!
Windows File Manager
(WinFile)
GitHub で公開中
https://github.com/Microsoft/winfile
社長が愛用する
WinFile で問題
が!
運用環境でアプリが!! 現場に急行せ
よ! 問題2
ヘルプメニューの項目
を
クリックすると、エ
ラー
問題1
特定のフォルダをクリック
すると、
意味不明なエラーメッセー
ジ
以下のものを入れたノート PC を持
参
運用環境でアプリが!! 現場に急行せ
よ!
Detours SDK
Detours を使う! - 1. トレースを取る
Detours を使う!
1. トレースを取
る
2. トレースを診
る
使用するコマンド
Detours を使う! - 1. トレースを取る : 作業
start syelogd.exe /q test.txt
withdll.exe /d:trcapi64.dll winfile.exe
作業の結果
Detours を使う! - 1. トレースを取る : 結果
Detours を使う! - 2. トレースを診る
Detours を使う!
1. トレースを取
る
2. トレースを診
る
Detours を使う! - 2. トレースを診る : 調査
MessageBox でエラーになった場所を探す
0 エラー
-1 エラー
• 上記以外は成功
解析の結果 – 原因を特定
Detours を使う! - 2. トレースを診る : 結果
問題 1
原因 : 不要なメッセージが表示
対処 : メッセージを非表示にす
る
問題 2
原因 : サポートされてない関数
対処 : 正しく動作する関数に変
える
Detours を使う! - 3. 対処をする
Detours を使う!
1. トレースを取
る
2. トレースを診
る
PatchDemo64.DLL を作成し使用
Detours を使う! - 3. 対処をする : DLL を作
成
Windows の API - MessageBoxW
WFHelp
作成した DLL を使用するコマンド
Detours を使う! - 3. 対処をする : DLL で対
処
withdll.exe /d:PatchDemo64.dll winfile.exe
setdll.exe /d:PatchDemo64.dll winfile.exe
Winfile.exe
または
Detours を使う! - 3. 対処をする : おさらい
呼び出し元 WFHelp()
MessageBoxW() WinHelp()
Detour 関数
Detour 関数
HtmlHelp()を呼
ぶ
問題 1 : エラーメッセージ
の対処
問題 2 : ヘルプの修正
運用環境でアプリが!! 現場に急行せ
よ!
Windows File Manager
(WinFile)
GitHub で公開中
https://github.com/Microsoft/winfile
社長が愛用する
WinFile で問題
が!
Detours まとめ - ここが凄い!
すべての関数を簡単にフック
フックの中でトレースを実装
フックの中で関数の動作を変更可能
ハードコア デバッギング : サポート直伝!
運用中 Windows アプリケーション バグバスター!!
AC12
1. 事務連絡
2. 本セッションのまとめ
本セッションのまとめ - 位置づけ
デバッグ エキスパートに
必要なスキル
プログラミング言語
OS と環境の理解
CPU の理解
テクノロジーとツール
https://aka.ms/ac12
本セッションのまとめ - 本日の内容
特定の関数のフック
応急処置に利用
一定期間のダンプ
過去に戻って調査
TTD
(Time Travel Debugging)
Detours
https://aka.ms/ac12
本セッションのまとめ - 資料
https://aka.ms/ac12
考えるな、感じろ。
最後に一言
それは月を指差すようなこと。
指先だけに捉われずに、
その先の栄光を掴むんだ!
様々な技術を活かし、
イノベーションを起こそ
う!
© 2018 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

ハードコア デバッギング : サポート直伝!運用中 Windows アプリケーション バグバスター!!

Editor's Notes

  • #6 開発専門家とデバッグ専門家の境
  • #10 開発専門家とデバッグ専門家の境
  • #11 その時なにが起こっていたが、ダンプを調査 2. メモリ上で書き換える
  • #16 それでは、私、早川から、昨年 9 月に公開され、皆さんのデバッグ ライフに革命をもたらす可能性を秘めた Time Travel Debugging をご紹介させていただきます。 と、その前に、、、
  • #18 例外発生時点まで逆戻りをしてコールスタックを表示しました
  • #19 関数の呼び出し箇所までさかのぼって操作しました
  • #20 そう、新しい WinDbg では、プログラムを過去の時点に遡ってデバッグすることができるのです。
  • #21 そう、新しい WinDbg では、プログラムを過去の時点に遡ってデバッグすることができるのです。
  • #22 まず、ご覧いただいたようにリボン UI を持つようになり、操作性が向上しました
  • #23 まず、ご覧いただいたようにリボン UI を持つようになり、操作性が向上しました
  • #24 まず、ご覧いただいたようにリボン UI を持つようになり、操作性が向上しました
  • #58 まず、ご覧いただいたようにリボン UI を持つようになり、操作性が向上しました
  • #59 まず、ご覧いただいたようにリボン UI を持つようになり、操作性が向上しました
  • #62 そもそもトレースを取れない
  • #75 ここで WinFile を起動して、問題を見せる WinFile – Win9x 時代のファイルマネージャ GitHubにて公開 https://github.com/Microsoft/winfile 問題点 特定のフォルダをクリックするとエラー ダイアログ ヘルプをクリックするとエラー ダイアログ
  • #76 ここで WinFile を起動して、問題を見せる WinFile – Win9x 時代のファイルマネージャ GitHubにて公開 https://github.com/Microsoft/winfile 問題点 特定のフォルダをクリックするとエラー ダイアログ ヘルプをクリックするとエラー ダイアログ
  • #77 ここで WinFile を起動して、問題を見せる WinFile – Win9x 時代のファイルマネージャ GitHubにて公開 https://github.com/Microsoft/winfile 問題点 特定のフォルダをクリックするとエラー ダイアログ ヘルプをクリックするとエラー ダイアログ
  • #88 ここで WinFile を起動して、問題を見せる WinFile – Win9x 時代のファイルマネージャ GitHubにて公開 https://github.com/Microsoft/winfile 問題点 特定のフォルダをクリックするとエラー ダイアログ ヘルプをクリックするとエラー ダイアログ
  • #91 開発専門家とデバッグ専門家の境
  • #92 開発専門家とデバッグ専門家の境