gpt4 book ai didi

php - WAMP 服务器崩溃时如何获取堆栈跟踪?

转载 作者:搜寻专家 更新时间:2023-10-31 21:46:35 24 4
gpt4 key购买 nike

有时我的 WAMP 服务器会崩溃。我收到以下错误。

HTTP has encountered exception and needs to close.
Unreferenced Memory.
szAppName : httpd.exe szAppVer : 2.2.11.0 szModName : php5ts.dll
szModVer : 5.3.0.0 offset : 0000c309


C:\DOCUME~1\blrcom\LOCALS~1\Temp\WERc677.dir00\httpd.exe.mdmp
C:\DOCUME~1\blrcom\LOCALS~1\Temp\WERc677.dir00\appcompat.txt

我的问题是如何获取堆栈跟踪来调试这个问题?我应该使用 Windows 调试器吗 windows debugger或者我应该启用 WAMP 服务器配置中的某些设置吗?

最佳答案

您可以使用 Debug Diag .
在启动 Debug Diag 时弹出的“选择规则类型”对话框中选择“崩溃”规则。

另请查看 Tess Ferrandez 博客条目 Debugging Native memory leaks with Debug Diag 1.1 . (虽然它不完全是关于你想要什么,但阅读该博客永远不会是错误的;-))


调试符号包含将可执行文件和代码“粘合”在一起的信息。 Microsoft 的调试符号格式称为“程序数据库”,它们通常存储在扩展名为 .pdb 的文件中。
现在你只能得到“php5ts 的汇编指令!zend_mm_shutdown+f69”。应用程序调用了由 php5ts.dll 导出的函数 zend_mm_shutdown,因此无论是否有调试符号,调试器都“知道”此函数。但它不知道导致编译器在 zend_mm_shutdown+f69 处构建机器指令的源代码。调试符号包含此类信息,因此调试器可以向您显示源代码和上下文。
您可以为调试和发布版本创建调试符号(对于后者,它们通常不太准确)。但是我还没有找到用于 wamp 构建的 php 的调试包。
对于 php.net/win32 版本,您可以从 http://windows.php.net/download/ 下载其发布版本的调试包。 .或者您可以下载源代码并自己创建调试版本。但是您不能将 wamp 可执行文件与 php.net 调试包混合使用(即您不会为此使用 wamp 可执行文件/dll)。

也许查看源代码可以提示您出了什么问题。但不知何故,我对此表示怀疑。 zend_mm_shutdown 中的 mm 可能代表“内存管理”。它可能只是释放了一些内存桶,并且它的一些数据结构此时是错误的。这可能是一些其他代码覆盖了 zend 内存管理的数据。可能是处理错误的边缘情况(已释放但未从列表/数据结构中删除的内容)。坏处是潜在的问题可能在任何地方......远离最终导致访问冲突的代码。如果 zend_mm_shutdown 真的是一些低级内存管理,那么可能没有太多关于改变数据结构的信息(以及为什么)。
我宁愿先尝试另一个 php 构建,看看问题是否再次出现。用 php.net 构建替换 wamp 文件应该不难。这可能就像替换 wamp 安装中的 php 文件夹一样简单,然后查看是否还必须将一些文件复制到 apache 二进制文件夹。
但是首先复制/备份完整的 wamp 文件夹....以防万一;-)

关于php - WAMP 服务器崩溃时如何获取堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2441032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com