编写一个简单的应用程序,在应用程序崩溃时启动所需的调试器.
注册您的应用程序
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
如果是64位操作系统,也可以使用以下密钥
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
添加/修改Debugger以value 命名的字符串:
"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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |