如何使用Delphi调试器调试ISAPI扩展?

9
我正在尝试调试一个用Delphi编写的ISAPI扩展。扩展程序可以正常工作,但我似乎无法进行调试(即设置断点并单步执行代码)。
我所做的如下:
  • 以管理员身份启动Delphi Rad Studio。
  • 确保通过浏览器访问已加载扩展程序。
  • 选择运行->附加到进程。
  • 选择w3wp.exe进程(未选中“附加后暂停”)。
  • 在默认处理程序的操作开始处设置断点。
  • 再次访问扩展程序。
然而,我的处理程序中从未触发断点(请参见下面的图片)。

enter image description here


我在xxm中采用的替代方法是将服务器端抽象为一个多才多艺的接口,从而可以自由地在IIS、Apache、SCGI或纯粹的“xxmHTTP”之间切换以进行调试。 - Stijn Sanders
2个回答

18

你的方法有限制,因为只能在应用程序启动后才能开始调试。如果您需要从第一个请求开始调试,则这是无用的。以下是正确的做法:

IIS设置:

1) 在IIS上,在默认网站下创建一个新的Web应用程序。

2) 默认网站下的每个应用程序都应该使用相同的应用程序池DefaultAppPool。确保此应用程序池能够运行没有调试的ISAPI应用程序。如果不能使用它来运行ISAPI应用程序,则也无法调试。

应用程序设置 (Delphi IDE):

在Delphi中设置应用程序(任何XE+ IDE具有类似的设置)

1) 以管理员身份运行Delphi。这不是绝对必需的,但可以让很多事情变得更容易并避免很多问题。

2) 在Delphi IDE中,选择Run -> Parameters。根据以下图片,设置Host application和Parameters:

Delphi App setup for ISAPI debugging W3WP.exe是IIS工作进程可执行文件,我们将交互式地运行它以调试ISAPI应用程序。请记住,w3wp.exe有两个版本:一个是32位的,在C:\Windows\SysWow64下,另一个是64位的,在C:\Windows\System32下。 您必须使用与应用程序匹配的正确版本。

3) 停止World Wide Web发布服务。您可以从提升的命令提示符中使用"net stop W3SVC",或使用Windows服务控制台。

当W3SVC停止后,只需从Delphi IDE中运行应用程序并从浏览器调用它。应用程序将加载,并且所有断点都将被激活。您可以像其他Delphi应用程序一样进行调试。


0

我需要调试一个从 Asp.Net Core 6.0 API 调用的 Delphi Xe2 Win32 DLL。

我有一个本地的 IIS 站点,该站点只有一个应用程序池。

将 Delphi xe2 以管理员身份运行。

打开一个 DLL 项目并使用以下参数设置调试

Delphi Configuration Window

打开任务管理器,然后点击详细信息,在搜索w3wp.exe任务并检查执行任务的用户名,对于我的情况是RzKeyServerWebCore.Local,获取此任务的PID = 18232

TaskManager

回到 Delphi,请单击运行->附加进程,查找相同的 PID 18232,然后单击附加。

Delphi Attach Window

向您的EndPoint发出请求,在Delphi中的结果是完整的调试信息

Debug Window


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