【问题标题】:Switching JIT debuggers?切换 JIT 调试器?
【发布时间】:2012-10-05 07:41:14
【问题描述】:

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

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

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

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

你怎么能这样做?

【问题讨论】:

  • JIT 调试器在注册表中设置,丑陋 - 但您的应用程序可以在开始时更改它。虽然在并行运行多个不同的应用程序时这无济于事
  • 要设置 Delphi IDE,而不是安装多个版本,this article 中的信息可能会有所帮助。 (这是一个 codegear.com 链接,但在我写这篇文章时它会加载。)这篇文章指的是旧版本的 Delphi,但可以轻松更新以使用新版本。
  • 谢谢,这是 Embarcadero 链接,应该会更长寿:support.embarcadero.com/article/36747

标签: windows visual-studio delphi debugging


【解决方案1】:

编写一个简单的应用程序,在应用程序崩溃时启动您想要的调试器。

中注册您的应用
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', [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;

【讨论】:

    【解决方案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

    如果要手动更改,需要特别注意。

    【讨论】:

    • 有哪些需要特别注意的地方?
    • “注册表更改不当可能会导致 Windows 无法使用”。所有 Microsoft 调试器都有自己的命令行开关或选项页面,用于将自己注册为事后调试器。使用这种自动方式可以避免注册表编辑错误。不确定 Delphi 是否也提供这种自动方式。
    • 所以基本上我应该这样做:1.安装每个工具,注意注册表设置,2.安装下一个。 3.转到1;最后制作一个小型开关应用程序,为我要使用的工具设置注册表。
    • 如果您想要这种灵活性,那么编写这样的工具应该会有所帮助。尚未找到现有工具。
    【解决方案3】:

    我认为,如果您确实需要调试使用不同工具制作的多个同时运行的应用程序,那么您唯一的选择是找到或创建一个桥接 JIT 调试器,该调试器将分析哪个项目崩溃并将控制权传递给对应的IDE调试器

    【讨论】:

    • 通常我知道什么会崩溃,所以手动更改 JIT 调试器的步骤以及要注意的提示就足够了。
    猜你喜欢
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多