如何在Delphi中调试由另一个.exe启动的.exe文件

3

我想要调试由App1.exe启动的App2.exe。如果App2.exe是一个dll,我可以指定一个宿主应用程序,但是这似乎对.exe文件无效。

现在我使用“附加到进程”,但如果App2.exe在我执行此操作之前崩溃,则此方法无用。

有没有一种方法可以不必手动附加到进程就能完成这个任务?

5个回答

5

设置“调试生成的进程”调试选项。 默认情况下,它是关闭的。 当App1启动新进程时,调试器将暂停。 如果调试器尚未自动附加到新进程,请附加到它,然后继续运行。


1
这是一个很酷的选项;不过有点难找:它在“工具”->“选项”->“调试器选项”->“CodeGear调试器”->“常规”->“调试生成的进程”下面。 - Jeroen Wiert Pluimers
但是我认为您无法以这种方式调试源代码?可能只能使用CPU视图? - Runner
如果有可用的源代码,你可以进行调试。如果在集成开发环境中加载了两个项目,则可能会有所帮助。 - Rob Kennedy

2
不,但是有可能有一种方法可以使其正确地附加。在崩溃点之前找到你知道将要发生的App2中的某些内容,并在该点弹出一个模态对话框。然后它不会继续执行,直到你解除它,这样给你时间来附加调试器。

3
或者你可以等待DebugHook变成非0的值。while DebugHook = 0 do Sleep(1000); - idursun

1

如果你使用的是Windows操作系统,则该系统内置了相关支持。 基本上,你可以通过告诉Windows加载器在特定进程启动时启动其他进程来实现此功能。例如,你可以告诉Windows每当你单击notepad.exe时始终启动winword.exe

你可以利用这种能力,在启动进程时自动启动调试器(此功能最初引入的原因就是为了这个目的,但你不仅仅局限于启动调试器:))

你可以在这里阅读到具体实现方法。 你也可以下载Windows调试工具包,并使用GFlags代替手动操作。


1

我想你可以自己启动app2.exe并将任何必要的命令行参数传递给它。


那个方法可以行得通,但我忘了提到这两个进程需要相互通信,所以我需要它们俩。不管怎样,还是谢谢。 - Giel

0
如果两个应用程序都是您自己的,并且您拥有代码,那么我建议采取以下措施:
  1. 为两个应用程序创建调试模式。例如,使用外部inc文件
  2. 启动两个IDE并在各自的IDE中加载每个应用程序。以调试模式构建
  3. 如果正确执行,则现在可以调试应用程序之间的内部通信
我有一个项目,其中服务器生成多个exe工作进程,每个进程都托管其自己的dll模块。我有一个调试模式,在该模式下,我可以指定将加载哪个dll,并且我可以让两个进程从IDE中运行和相互通信。这是我迄今为止找到的最好方法。

这两个IDE是用来做什么的?我非常确定是Delphi 4引入了同时调试多个进程的能力。 - Rob Kennedy
啊,不知道呢 :) 謝謝你提供的信息。現在我感覺有點傻 :) - Runner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接