![在 IIS 失败请求跟踪中获取实际编译的 ASP 文件](https://linux22.com/image/763095/%E5%9C%A8%20IIS%20%E5%A4%B1%E8%B4%A5%E8%AF%B7%E6%B1%82%E8%B7%9F%E8%B8%AA%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%AE%9E%E9%99%85%E7%BC%96%E8%AF%91%E7%9A%84%20ASP%20%E6%96%87%E4%BB%B6.png)
当 ASP(Classic、VBScript)页面上发生错误时,将显示生成的错误消息(如果设置为显示错误响应)以及完整的FREB 日志,如果您打开了该功能,则会显示处理的 ASP 文件中发生错误的行号。
这非常有用,因为您可以查看文件,找到错误并修复它。或者至少,如果您的 ASP 文件只是一个不包含任何其他文件的单个文件,您可以这样做。
另一方面,如果你的文件确实有任何<!-- #include -->
包含其他文件的指令,那么事情就没那么有用了。因为 ASP/IIS 包含发生前处理文件时,行号不是磁盘上任何实际文件的实际行号,而是由复制到主文件中各自位置的所有包含文件组成的文件中的行号。当您的文件顶部有大约 30 个包含指令,然后被告知第 592 行有错误时,您最终完全不知道该行在哪个物理文件中,而您需要浏览 30 个文件才能找到正确的文件。
不幸的是,据我所知,没有办法检索有关特定行最初属于哪个文件的信息,因此无法获得错误消息的完整有用版本。
但服务器至少应该能够提供正在处理的页面,以便您可以查看它,找到行号 592 并且至少知道导致错误的行的内容和上下文是什么。
我不指望这可以在输出到浏览器的错误消息中提供(这将是一个明显的、巨大的安全漏洞),但它肯定应该很容易包含在失败请求跟踪中,其中包含有关文件执行的所有其他内容的成千上万行详细信息。遗憾的是,我还没有找到真正做到这一点的方法。
有没有办法指示 IIS 将已编译的 ASP 文件(作为纯文本)作为失败请求跟踪的一部分提供,以便错误消息中的行号真正有用?
答案1
有一种相当简单的方法可以查看 ASP 文件及其包含项的组合输入。但只能在您的开发机器上查看,而不是在您的生产服务器上查看。
首先在 PowerShell 中以管理员身份安装 Server-Side-Includes:
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ServerSideIncludes
现在,假设您有一个包含许多内容的页面。在同一位置/index.asp
复制一份并在浏览器中调用该 URL。index.shtml
现在查看页面的代码(Ctrl+U),您应该看到合并的源代码。
IIS ServerSideIncludes 处理程序包含包含目录中的所有文件,但不运行经典的 ASP 解释器。