Windows上の商用ソフトウェアのバグを見つけて修正する方法

Wikipediaによると、”ソフトウェアのバグは、コンピュータプログラムやシステムのエラー、欠陥、障害、または障害であり、誤った結果や予期しない結果を生成したり、意図しない方法で動作したり、最終的にアプリケーションをクラッシュさせたりします。 バグを修正するプロセスは”デバッグ”と呼ばれ、バグを特定するために正式な技術やツールを使用することがよくあります。”

ほとんどの場合、バグは開発者環境で再現され、バージョンを本番環境に送信する前に修正することができます。 しかし、バグは、ユーザーの特定の環境やプロファイルに依存することがあります—例えば、フォルダ名に特殊文字を使用するなど、バグの根本的な原因を理 最悪のバグは、ユーザーがバグを再現見るためにscreenshareセッションを設定するためのユーザーサポートが必要になります。

Dashlaneでは、Windowsチームはバグを見つけて再現するためにいくつかのツールを使用しています:

  • 問題が発生した場所を見つけて修正するための技術ログ
  • Microsoft Process MonitorとProcess Explorer、悪いインストールや破損した環境を特定する二つの無料ツール

最近、Microsoftは別の開発者ツール、WinDbgの新しいバージョンを導入しました。 このアプリケーションは、Uwpアプリに移植されたMicrosoft Storeで自由に利用可能であり、非常に素晴らしく、便利な機能が付属しています:TTD、またはタイムトラベッ 特定のマシンでのみ発生していた非常に再現が難しいバグを修正しなければならなかった時間について考えてみてください。 または、可能であれば、そのマシンに開発者環境をインストールするのに費やした時間について考えてみてください。 そして、バグを再現するためにデバッグモードでアプリケーションを起動しなければならなかった回数を考えて、f11ではなくf5を誤って押して破損した行を逃しました。 Ttdは、バグを一度だけ記録して、前方と後方の両方で何度も再生できるようにする必要があるため、これをケーキに変換します。

WinDbgを使用したタイムトラベルデバッグ

TTDは逆デバッグソリューションです。 それは3つのステップで構成されています:

  1. バグを再現できるマシンにアプリまたはプロセスを記録します。 管理者権限でWinDbgを使用し、実行可能ファイルを起動するか、すでに実行中のものにアタッチしてトレースを記録します。 結果はファイル(。run extension)には、バグを再現するためのすべての情報が含まれています。 このため、Dashlaneでは、ユーザーの機密情報を収集しないように、ログイン前に発生するバグをデバッグするためにのみ使用できます。
  2. 記録されたトレースを、問題を理解するために必要な回数だけ前後に再生します。 ロードされると、WinDbgはトレースのインデックスを作成し、完全で高速なメモリルックアップを提供します。 我々は通常、我々はソースコードとPDBシンボルをロードすることができ、開発者のマシン上で開きます。 このようにして、IDEでコードを実行しているときに、記録されたマシンからのプロセスレコードとメモリレコードを使用してトレースを再生できます。 (ソースコードとシンボルが記録されたプロセスバージョンと一致していることを確認してください。)
  3. ブレークポイントを追加して分析し、一般的なコードの問題を特定するためのクエリを実行し、何が起こっているのかを理解するためにメモリとロカ

単純なコンソールアプリケーションを作成して構築したとします。

void GuiltyFunction(int a, int b, int c)
{
int x = a + b + c;
int y = 0;
y = x / b;
}
int main()
{
int a = 10;
int b = 0;
int c = 3;
GuiltyFunction(a, b, c);
return 0;
}

ビルドされたアプリケーション(TestTTD。exe)とシンボルファイル(TestTTD。pdb)は、C:\TestTTD\bin、ソースコードはC:\TestTTD\src…..

レコード

  1. 昇格された権利を持つWinDbgを開きます。
  2. ファイルタブで、実行可能ファイルの起動(詳細設定)を選択します。 実行可能ファイルフィールドに、次のように入力しますC:\TestTTD\TestTTD…..exe”を起動します。 タイムトラベルデバッグで記録プロセスをチェックし、出力ディレクトリを書き込み可能な既存のパスに設定してから、OKをクリッ
  3. アプリケーションがクラッシュすると、WinDbgはトレースファイル(.拡張機能を実行します)と、それをロード中に場所をログに記録します。
  4. デバッガーを停止し、トレースファイルの場所を開きます。

  1. ファイルタブで、左側のサイドバーから設定を選択します。 デバッグ設定を選択し、追加しますC:\TestTTD\src ソース-パス-フィールドに、C:\TestTTD\bin Symbol pathフィールドに移動します。 “OK”をクリックして変更を保存します。
  2. ファイルタブで、トレースファイルを開くを選択し、レコードステップで作成されたトレースファイルを参照します。

Analyze

  1. 記録されたトレースファイルがWinDbgにロードされたら、ブレークポイントを追加してアプリケーションの状態を停止して分析します。 ソースタブからスクリプトファイルをロードし、目的のブレークポイントの行の左側をクリックします。 ブレークポイントに実行するには、F5を押します。
  2. Visual Studioのデバッグセッションのように、F10を押してステップオーバーします。 後方に実行するには、ステップオーバーバックをクリックします。

結論

本番コードをデバッグし、再現性の低いバグをデバッグする場合、WinDbgとそのタイムトラベルデバッグは、障害のあるアプリケーションを影響を受けた環境に記録し、どこでも再生できるようにすることで、時間とリソースを節約するのに役立つ開発者にとって素晴らしいツールです。 詳細については、Microsoftのブログをご覧いただくか、MSDN Channel9のwebサイトでデモをご覧ください。

Leave a Reply

メールアドレスが公開されることはありません。