3

有时我的 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 调试器 还是应该启用 WAMP 服务器配置中的某些设置?

4

2 回答 2

1

您可以使用调试诊断
在启动调试诊断时弹出的“选择规则类型”对话框中选择“崩溃”规则。

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


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

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

于 2010-03-14T03:43:47.733 回答
0

请从带有 php 5.3.0 调试包的工具调试诊断工具中查看以下日志。用于访问 MySql 的 PDO 库是否有问题?崩溃是非常间歇性的。请回复。

线程 61 - 系统 ID 2760 入口点 msvcrt!_endthreadex+3a 创建时间 2010 年 3 月 31 日下午 5:25:46 在用户模式下花费的时间 0 天 0:0:16.593 在内核模式下花费的时间 0 天 0:0:0.453

Function Arg 1 Arg 2 Arg 3 Source php5ts!_zend_mm_free_int+139 0288a878 00020004 008eff46
php5ts!_efree+36 0110ff48 02d18868 0090e442
php5ts!_zval_ptr_dtor+66 024ffa88 02d18770 02d18848
php5ts!zend_std_write_property+1f2 02d18848 0110ff48 02d18868
php5ts!pdo_stmt_construct+7d 02d1b968 02d18848 0110eb90
php5ts! zim_PDO_prepare+428 0110eb90 02d18848 00000000
php5ts!zend_do_fcall_common_helper_SPEC+946 024ffbf8 028894c8 024ffe74
php5ts!execute+29e 02d40070 02889400 00000000
php5ts!zend_execute_scripts+f6 00000008 028894c8 00000000
php5ts!php_execute_script+22d 024ffe74 028894c8 00000005
php5apache2_2!php_handler+5d0 03249f98 008238b8 03249f98
libhttpd!ap_run_handler+21 03249f98 03249f98 03249f98
libhttpd!ap_invoke_handler+ae 00000000 029e9fd8 024fff38
libhttpd!ap_die+29e 03249f98 00000000 00788168
libhttpd!ap_get_request_note+1c9c 029e9fd8 029e9fd8 029e9fd8
libhttpd!ap_run_process_connection+21 029e9fd8 00775050 024fff80
libhttpd! ap_process_connection+33 029E9FD8 027DE3F0 000000 0000
libhttpd!ap_regkeyy_value_remove+c7c 029e9fd0 000000 0000 0000 0000 0000 0000 0000 0000
MSSMSREAD!_ENDTHREAD

于 2010-04-01T04:13:40.990 回答