加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 切换JIT调试器?

发布时间:2020-12-14 02:54:14 所属栏目:Windows 来源:网络整理
导读:当您必须使用不同的IDE维护不同的项目时,将它们安装在同一台 Windows计算机上通常是有意义的. 例如,在同一系统上混合Visual Studio和Delphi,或各种版本的Delphi(我确信其他版本甚至有不同的组合). 你会发现其中一件事是最新工具将自己安装为JIT调试器:应用
当您必须使用不同的IDE维护不同的项目时,将它们安装在同一台 Windows计算机上通常是有意义的.

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

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

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

你怎么能这样做?

解决方法

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

注册您的应用程序

HKLMSOFTWAREMicrosoftWindows NTCurrentVersionAeDebug

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

HKLMSOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionAeDebug

使用值添加/修改名为Debugger的字符串:

"C:..Win32DebugProject1.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 Studio9.0binbds.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:Windowssystem32VSJitDebugger.exe',PChar(Format('-p %s -e %s',SW_SHOWNORMAL);
    //..
  end;
  if Bool(proc) then begin
    WaitForSingleObject(proc,INFINITE);
    Application.Terminate;
  end;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读