微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

windows – 切换JIT调试器?

当您必须使用不同的IDE维护不同的项目时,将它们安装在同一台 Windows计算机上通常是有意义的.

例如,在同一系统上混合Visual Studio和Delphi,或各种版本的Delphi(我确信其他版本甚至有不同的组合).

你会发现其中一件事是最新工具将自己安装为JIT调试器:应用程序崩溃时触发的即时调试器.

根据应用程序崩溃的工具和版本(有时在调试器内运行时无法重现错误,例如Heisenbug),您需要提前选择调试器.

你怎么能这样做?

解决方法

编写一个简单的应用程序,在应用程序崩溃时启动所需的调试器.

注册您的应用程序

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

如果是64位操作系统,也可以使用以下密钥

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',SW_SHOWnorMAL);
    3: ShellExecute(0,'C:\Windows\system32\vsjitdebugger.exe',PChar(Format('-p %s -e %s',SW_SHOWnorMAL);
    //..
  end;
  if Bool(proc) then begin
    WaitForSingleObject(proc,INFINITE);
    Application.Terminate;
  end;
end;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐