当您必须使用不同的IDE维护不同的项目时,将它们安装在同一台
Windows计算机上通常是有意义的.
例如,在同一系统上混合Visual Studio和Delphi,或各种版本的Delphi(我确信其他版本甚至有不同的组合).
你会发现其中一件事是最新工具将自己安装为JIT调试器:应用程序崩溃时触发的即时调试器.
根据应用程序崩溃的工具和版本(有时在调试器内运行时无法重现错误,例如Heisenbug),您需要提前选择调试器.
你怎么能这样做?
解决方法
编写一个简单的应用程序,在应用程序崩溃时启动所需的调试器.
注册您的应用程序
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
如果是64位操作系统,也可以使用以下密钥
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
"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 举报,一经查实,本站将立刻删除。