テスト中の障害発生時に調査を円滑に行うための準備と情報採取のためのバッチをつくる

やりたいこと

Releaseビルドの正式リリース版のテスト時に、アプリクラッシュやその他もろもろの障害であたふたしないための準備

以前、正式版のテストで、テスターの方から

  • なんかアプリがクラッシュするけど、再現しようとしてもなかなか再現しない。
  • テストの終盤で、なんかイベントログに対象アプリのクラッシュログが残ってた。これ大丈夫?

ということがあり、その調査にかなりの時間を取られた。

いずれの場合も、クラッシュしたときの状況は全然覚えてない、という感じなので、状況のヒアリングを念入りに行っても、得られる情報は「たぶん〇〇してたような気がする...」「別になにもしてない(と言っていたが実際はいろいろやってた)」みたいな感じで、不正確なものが多いので、なかなか真相にたどりつかず、えらい苦労した。

そういうことがあっても、エラー発生時の情報を迅速に集められるように、テスト開始前に準備しておきたい。

やること案

今までに得たデバッグ・障害調査ノウハウを全部持ち寄って、かつ、テスターの方の手間にならないようなやり方で準備できれば、かなりの情報を得られると思う。 (準備に手間がかかるという時点で、そもそも準備をやってもらえない、になるので、手間がかからないようにバッチ等を準備したい)

基本、いままでやってきたことの集大成で行けると思う。

下記の知識を引っ張り出してくる。

これまでの知識+α

やったこと

事前準備

テストの実施前に、
WERでダンプが取れるようにするためのregファイルを実行しておく。regファイルの中身は下記。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpCount"=dword:00000005
"DumpFolder"="C:\\dumps"
"DumpType"=dword:00000002

事後の情報採取

いざアプリのクラッシュ等がおきて、情報を収集するときになったら、上で挙げたようなことを行える下記バッチを実行する。

※バッチファイルはSJISで保存すること

@echo off
cd %~dp0

mkdir Data\

echo ダンプを保存しているフォルダをコピー
xcopy "C:\dumps" .\Data\\dumps\ /e /y

echo イベントログ
wevtutil export-log application .\Data\EvtLog_App.evtx
wevtutil export-log System .\Data\EvtLog_System.evtx

echo 全ドライバのバージョン
powershell -command "Get-WmiObject -query 'Select * from Win32_PnPSignedDriver'" 1> .\Data\DriverVersion.txt 2>&1

echo 全デスクトップアプリのバージョン
powershell -command "Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion" 1> .\Data\DesktopAppVersion.txt 2>&1

echo パッケージデスクトップアプリのバージョン
powershell -command "Get-AppxPackage | select PackageFullName,Version" 1> .\Data\PackageAppVersion.txt 2>&1

echo 指定のフォルダ以下にあるexe/dllファイルのバージョンを取得する
powershell -command "Get-ChildItem -Path \"C:\git\PipeJikken\" -Include *.exe, *.dll -Recurse | ForEach-Object { [PSCustomObject]@{ FileName = $_.Name; Version = $_.VersionInfo.FileVersion } } | Format-Table -AutoSize" 1> .\Data\ExeDllFileVersion.txt 2>&1

echo あとその他必要そうなフォルダをコピーする
rem xcopy "C:\SomeFolder" .\Data\SomeFolder\ /e /y

pause

こんな感じで、一通りほしい情報とれるかな...

あとは、これで採取したダンプをデバッグしたり、ログを解析して、なんとか障害を解決する。