我正在开发一个带有嵌入式脚本的 VCL (Delphi Win32) 表单应用程序平台,并希望添加调试支持。脚本在主 VCL 线程中执行 - 脚本直接进行 UI 操作,并有一些其他遗留约束将其保留在 UI 线程中。
调试器 UI 需要在自己的线程中运行,因为主 UI 线程将阻塞脚本断点。它仍然需要在同一个进程中,线程安全调试组件才能工作。
我尝试关注 Blorgbeard 对https://stackoverflow.com/a/12505959/243144的评论,但我不确定 Delphi 的 VCL 是否可行。(.NET 在将表单传递给 Application.Run 时创建一个新的 ApplicationContext) 使用以下 Delphi,主 UI 线程的阻塞会停止第二个线程上的消息处理(反之亦然)。
procedure TDebuggerThread.Execute;
begin
CoInitialize(nil);
FForm := TForm2.Create(nil);
FForm.Show;
Application.Run;
end;