Как получить трассировку стека при сбое сервера WAMP? - PullRequest
3 голосов
/ 14 марта 2010

Иногда мой 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 есть какие-то настройки, которые я должен включить?

Ответы [ 2 ]

1 голос
/ 14 марта 2010

Вы можете использовать Debug Diag .
Выберите правило «Сбой» в диалоговом окне «Выбор типа правила», которое появляется при запуске Debug Diag.

Также взгляните на запись в блоге Тесс Феррандез. Отладка утечек памяти в собственной памяти с помощью Debug Diag 1.1 . (Хотя это не совсем то, что вы хотите, это никогда неправильно читать этот блог; -))


Символы отладки содержат информацию, которая «склеивает» исполняемый файл и код вместе. Формат Microsoft для символов отладки называется «база данных программы», и они обычно хранятся в файлах с расширением .pdb.
Прямо сейчас вы получаете только «инструкцию по сборке на php5ts! Zend_mm_shutdown + f69». Приложение вызвало функцию zend_mm_shutdown, которая экспортируется php5ts.dll, поэтому отладчик «знает» об этой функции независимо от того, есть символы отладки или нет. Но он не знает об исходном коде, который побудил компилятор построить машинную инструкцию по адресу zend_mm_shutdown + f69. Символы отладки содержат такую ​​информацию, поэтому отладчик может показать вам исходный код и контекст.
Вы можете создавать символы отладки как для отладки, так и для сборки выпуска (для последних они обычно менее точны). Но я не нашел отладочный пакет для сборки wamp из php.
Для сборки php.net/win32 вы можете скачать пакеты отладки для их сборок выпуска с http://windows.php.net/download/. Или вы можете скачать исходный код и создать отладочную сборку самостоятельно. Но вы не можете смешивать исполняемый файл wamp с пакетами отладки php.net (т.е. вы не будете использовать для этого исполняемые файлы / библиотеки wamp).

И, возможно, просмотр исходного кода поможет вам понять, что происходит не так. Но почему-то я в этом сомневаюсь. Мм в zend_mm_shutdown, вероятно, означает «управление памятью». Вероятно, он просто освобождает некоторые сегменты памяти, и некоторые из его структур данных неверны на данный момент . Это может быть какой-то другой код, перезаписывающий данные управления памятью Zend. Может быть крайний случай, который обрабатывается неправильно (что-то, что было освобождено, но не удалено из списка / структуры данных). Плохо то, что основная проблема может быть где угодно ... далеко, далеко от кода, который в конечном итоге вызывает нарушение прав доступа. И если zend_mm_shutdown действительно является неким низкоуровневым управлением памятью, вероятно, осталось не так много информации о том, что изменило структуру данных (и почему).
Я предпочел бы сначала попробовать другую сборку php и посмотреть, возникнет ли проблема снова. Не должно быть трудно заменить файлы wamp сборкой php.net. Это может быть так же просто, как заменить папку php в вашей установке wamp, а затем посмотреть, нужно ли вам скопировать некоторые файлы в двоичную папку apache.
Но сначала сделайте копию / резервную копию полной папки wamp .... на всякий случай; -)

0 голосов
/ 01 апреля 2010

Пожалуйста, смотрите журналы ниже от средства диагностики отладки инструмента с пакетом отладки php 5.3.0. Это проблема с библиотекой PDO, которая используется для доступа к MySql? Авария очень прерывистая. Ответьте, пожалуйста.

Тема 61 - системный идентификатор 2760 Точка входа msvcrt! _Endthreadex + 3a Время создания 31.03.2010 17:25:46 Время, проведенное в пользовательском режиме 0 дней 0: 0: 16.593 Время, проведенное в режиме ядра 0 дней 0: 0: 0.453

Функция 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 00ed0000
libhttpd! ap_regkey_value_remove + c7c 029e9fd0 00ed0000 00f10000
msvcrt! _endthreadex + a9 011d3088 00ed0000 00f10000
kernel32! BaseThreadStart + 37 77c3a341 011d3088 00000000

...