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 フォルダーのコピー/バックアップを作成してください ....念のため ;-)