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

时间:2010-03-14 02:57:18

标签: php crash stack-trace wamp

有时我的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服务器配置中的某些设置吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Debug Diag 在启动Debug Diag时弹出的“Select Rule Type”对话框中选择“Crash”规则。

另请参阅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上构建机器指令的源代码。调试符号包含此类信息,因此调试器可以向您显示源代码和上下文 您可以为调试和发布版本创建调试符号(对于后者,它们通常不太准确)。但是我还没有为php的wamp版本找到一个调试包 对于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文件夹....以防万一; - )

答案 1 :(得分: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

功能Arg 1 Arg 2 Arg 3来源 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!执行+ 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 00ed0000
libhttpd!ap_regkey_value_remove + c7c 029e9fd0 00ed0000 00f10000
msvcrt!_endthreadex + a9 011d3088 00ed0000 00f10000
kernel32!BaseThreadStart + 37 77c3a341 011d3088 00000000