Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用delphi调试器调试isapi扩展?_Delphi - Fatal编程技术网

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

如何使用delphi调试器调试isapi扩展?,delphi,Delphi,我正在尝试调试用Delphi编写的ISAPI扩展。扩展工作得很好,但我似乎无法调试它(即设置断点并单步执行代码) 以下是我所做的: 以管理员身份启动Delphi Rad Studio 通过在浏览器中访问扩展名,确保已加载扩展名 选择运行->附加到进程 已选择w3wp.exe进程(未选中“附加后暂停”) 在默认处理程序操作的开始处设置断点 试图再次访问扩展名 但是,在我的处理程序中从未触发断点(请参见下图): 您的方法的实用性有限,因为您只能在应用程序启动后开始调试。如果您需要从第一个请求开始

我正在尝试调试用Delphi编写的ISAPI扩展。扩展工作得很好,但我似乎无法调试它(即设置断点并单步执行代码)

以下是我所做的:

  • 以管理员身份启动Delphi Rad Studio
  • 通过在浏览器中访问扩展名,确保已加载扩展名
  • 选择运行->附加到进程
  • 已选择w3wp.exe进程(未选中“附加后暂停”)
  • 在默认处理程序操作的开始处设置断点
  • 试图再次访问扩展名
但是,在我的处理程序中从未触发断点(请参见下图):


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

IIS设置:

1) 在IIS上,在默认网站下创建新的web应用程序

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

应用程序设置(Delphi IDE):

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

1) 以管理员身份运行Delphi。不是绝对需要的,但使很多事情更容易,避免了很多问题

2) 在DelphiIDE中,选择Run->Parameters。通知主机应用程序和参数,如下图所示:

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

3) 停止万维网发布服务。您可以在提升的命令提示符下使用“net stop W3SVC”,也可以使用Windows服务控制台


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

我采用的另一种方法是将服务器端抽象到一个单一的多功能界面下,使其能够在IIS、Apache、SCGI或普通的“xxmHTTP”之间自由切换以进行调试