アプリケーションがクラッシュした場合に必要なデバッガーを起動する単純なアプリケーションを作成します。
にアプリを登録する
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;