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

q7solyqu  于 2023-03-12  发布在  其他
关注(0)|答案(2)|浏览(148)

我试图调试一个用 Delphi 编写的ISAPI扩展。该扩展工作正常,但我似乎无法调试它(即设置断点和单步代码)。
以下是我所做的:

  • 以管理员身份启动 Delphi Rad Studio。
  • 已确保通过在浏览器中访问扩展插件来加载扩展插件。
  • 所选运行-〉附加到过程。
  • 已选择w3wp.exe进程(未选中“连接后暂停”)
  • 在默认处理程序的操作开始时设置断点
  • 已尝试再次访问分机

然而,在我的处理程序中,断点从未被触发过(见下图):

col17t5w

col17t5w1#

你的方法实用性有限,因为你只能在你的应用程序启动之后才能开始调试。如果你需要从第一个请求开始调试,这是没有用的。这是你应该做的:

IIS安装程序:

1)在IIS上,在“默认网站”下创建新的Web应用程序。
2)“默认网站”下的每个应用程序都应使用同一应用程序池DefaultAppPool。请确保此应用程序池能够在不进行调试的情况下运行ISAPI应用程序。如果无法使用此应用程序池运行ISAPI应用程序,则也无法对其进行调试。

应用程序安装( Delphi IDE):

在 Delphi 中设置应用程序(任何XE+ IDE都有类似的设置)
1)以管理员身份运行 Delphi 。不是绝对必需的,但可以让很多事情变得更容易,避免很多问题。
2)在 Delphi 中,选择运行-〉参数。通知主机应用程序和参数,如下图所示:
x1c 0d1x W3WP.exe是IIS工作进程可执行文件,我们将以交互方式运行它来调试ISAPI应用程序。请记住,w3wp.exe有两个版本:一个32位版本位于C:\Windows\SysWow64下,另一个64位版本位于C:\Windows\System32下。您必须使用与应用程序匹配的正确版本。
3)停止World Wide Web Publishing服务。您可以从提升的命令提示符使用“net stop W3 SVC”,或使用Windows服务控制台。
一旦W3 SVC被停止,只需从 Delphi IDE运行应用程序并从浏览器调用它。当应用程序加载时,所有断点都将被激活。您可以像任何其他Delphi应用程序一样进行调试。

v64noz0r

v64noz0r2#

我通过以下方式调试了API调用的 Delphi 2 Win32 DLL
我有一个本地IIS站点,这个站点只有一个应用程序池,
管理员身份运行 Delphi xe 2

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

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

返回 Delphi 单击运行-〉附加到进程并查找相同的PID 18232,单击附加。

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

相关问题