5

異なる IDE で異なるプロジェクトを維持する必要がある場合、多くの場合、それらを同じ Windows マシンにインストールするのが理にかなっています。

たとえば、Visual Studio と Delphi を混在させたり、同じシステムにさまざまなバージョンの Delphi を混在させたりします (組み合わせが異なるシステムもあると思います)。

ここでわかることの 1 つは、最新のツールが JIT デバッガー (アプリがクラッシュしたときに起動するジャストインタイム デバッガー) としてインストールされることです。

アプリがクラッシュしたツールとバージョンに応じて (Heisenbug の場合など、デバッガー内で実行しているときにバグを再現できない場合があります)、事前にデバッガーを選択する必要があります。

どうやってそれができる?

4

3 に答える 3

7

アプリケーションがクラッシュした場合に必要なデバッガーを起動する単純なアプリケーションを作成します。

にアプリを登録する

HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug

64ビットOSの場合、以下のキーにも

HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug

Debugger次の値で 指定された文字列を追加/変更します。

"C:.. \ Win32 \ Debug \ Project1.exe"%ld%ld
 

非常に単純なアプリケーション:

procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Add('BDS 16');
  ComboBox1.Items.Add('BDS 15');
  ComboBox1.Items.Add('WinDbg');
  ComboBox1.Items.Add('VS');
  // etc..
  ComboBox1.ItemIndex := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  proc: THandle;
begin
  Assert(ParamCount >= 2);
  proc := OpenProcess(SYNCHRONIZE, False, StrToInt(ParamStr(1)));
  case ComboBox1.ItemIndex of
    0: ShellExecute(0, '', 'C:\..\RAD Studio\9.0\bin\bds.exe',
          PChar(Format('/attach:%s;%s', [ParamStr(1), ParamStr(2)])), '',
          SW_SHOWNORMAL);
    1 : // etc..
    2: ShellExecute(0, '', 'C:\Program Files (x86)\..\windbg.exe',
          PChar(Format('-p %s -e %s -g', [ParamStr(1), ParamStr(2)])), '',
          SW_SHOWNORMAL);
    3: ShellExecute(0, '', 'C:\Windows\system32\VSJitDebugger.exe',
          PChar(Format('-p %s -e %s', [ParamStr(1), ParamStr(2)])), '',
          SW_SHOWNORMAL);
    //..
  end;
  if Bool(proc) then begin
    WaitForSingleObject(proc, INFINITE);
    Application.Terminate;
  end;
end;
于 2012-10-05T16:01:26.067 に答える
2

Microsoft のドキュメントを検索すると、\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug の下のレジストリ キーを介して事後分析のデバッグを制御できることがわかります。

http://msdn.microsoft.com/en-us/library/windows/hardware/ff542967(v=vs.85).aspx

手動で変更する場合は、特に注意する必要があります。

于 2012-10-05T08:56:22.480 に答える
1

異なるツールで作成された複数の同時実行アプリケーションを本当にデバッグする必要がある場合、唯一のオプションはブリッジ JIT デバッガーを見つけるか作成することです。これは、どのプロジェクトがクラッシュしたかを分析し、対応する IDE デバッガーに制御を中継するものです。

于 2012-10-05T07:50:40.150 に答える