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

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 でのアセンブリ命令」しか得られません。アプリケーションは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 はzend_mm_shutdownおそらく「メモリ管理」の略です。おそらくメモリのバケツをいくつか解放するだけであり、そのデータ構造のいくつかはこの時点で間違っています。これは、zend メモリ管理のデータを上書きする他のコードである可能性があります。誤って処理されたエッジ ケース (解放されたが、リスト/データ構造から削除されていないもの) である可能性があります。悪いことに、根本的な問題はどこにでもある可能性があります...アクセス違反を最終的に引き起こしているコードから遠く離れた場所にある可能性があります。そして、zend_mm_shutdown本当に低レベルのメモリ管理である場合、データ構造が変更された理由 (およびその理由) についての情報はおそらくあまり残っていません。
最初に別の php ビルドを試して、問題が再発するかどうかを確認したいと思います。wamp ファイルを php.net ビルドに置き換えるのはそれほど難しいことではありません。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 PM ユーザー モードで費やされた時間 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 00ED0000
LIBHTTPD!AP_REGKEY_VALUE_REMOVE+C7C 029E9FD0 000000 00F10000 MSVCRT!_ENDTHREADEX
+
A9

于 2010-04-01T04:13:40.990 に答える