• λ我爱Aspx >> Asp.Net >> 调试分布式 Web 应用程序 (3)
  • 调试分布式 Web 应用程序 (3)

  • :未知  Դ:internet  :2007-5-5 19:44:02  ؼ:web
  • 调试时的常见问题 在分布式 Web 应用程序中最常见的问题有:
    • ASP 0115—访问冲突
    • ASP 服务器太忙的错误
    • 100% 的 CPU 问题
    在这一节,我们将分析引起这些问题的可能原因,讨论如何调试并鉴别引起每个问题的代码行。 ASP 0115—访问冲突 访问冲突主要是由堆和堆栈故障引起的。 如果您进行这样一些操作,如分配一块内存并试图在该内存块之外执行读写操作,就会引起访问冲突。 例如:char* pszTemp = (char*) malloc(strlen("BOMB THIS")); strcpy(pszTemp,"BOMB THIS"); 在本例中,用户分配 9 个字节的内存,但没有包含 NULL 的结束符("\0")。当试图向此内存位置复制字符串时,因为函数试图访问所分配的内存段以外的部分,就会产生错误。 另一个方案试图访问一个非法的内存位置。 例如:FunctionA() { m_pAV = NULL; FunctionB(m_pAV); } FunctionB(CAccessViolate* pAV) { pAV->BombThis(); } 在本例中,FunctionB 使用传递给它的 pAV 指针而未检查其合法性,从而导致访问冲突。 大多数访问冲突发生在当 ASP 页试图访问一个组件,而这个组件又正在试图做错误的事情时。为简单起见,我们假定您已将某个组件安装为库程序包。当您试图访问使用这个组件的一个 ASP 页时,ASP 页可能返回以下信息: error 'ASP 0115'Unexpected error/<Web Server Name>/<ASP file name>.aspA trappable error occurred in an external object. The script cannot continue running.

    这个错误消息指出在某个特定的 ASP 页中有一个错误,它是由在某个外部对象中产生一个异常引起的。它表明您试图在 ASP 页中访问一个失败的组件。您可以这样来进一步隔离问题,在 ASP 页中删除对任何组件的所有引用,然后再逐个将它们添加进来,直到找到故障原因为止。

    如果隔离的过程过于冗长乏味,或者您没有获得一个指明 ASP 页名的清晰错误信息,则可以将 WinDBG、User Mode Process Dump 或 IIS Exception Monitor 连接到 inetinfo,并开始调试。

    找出引起访问冲突的代码行 假定您已使用 User Mode Process Dump 工具连接到 inetinfo 进程,并创建了一个转储文件。现在开始在 WinDBG 中检查转储文件,并尽力勾画出所发生的事情。 在 WinDBG 中打开故障转储文件,在 View 菜单中,单击 Call Stack 图 4. 显示堆栈的 Windows 调试程序对话框 Ҷƪл˵?
  • һƪ《用Delphi设计代理服务器》原文及源程序
    һƪ调试分布式 Web 应用程序 (2)