6

Yii フレームワークでアプリケーションを構築しており、メモリ不足エラーの原因を突き止めようとしています。スタックトレースを取得することは可能ですか? 私は何かをやってみました...

function handleShutdown() {
    debug_print_backtrace();
    $error = error_get_last();
    $info = "[SHUTDOWN] file:".$error['file']." | ln:".$error['line']." | msg:".$error['message'] .PHP_EOL;
    echo $info;
}
register_shutdown_function('handleShutdown');

しかし、 debug_print_backtrace() は何も表示しません

#0 handleShutdown()
[SHUTDOWN] file:C:\Users\bkuhl\htdocs\instaLabel\yii-1.1.12\base\CModule.php | ln:530 | msg:Allowed memory size of 67108864 bytes exhausted (tried to allocate 65488 bytes)

CModule.php を確認しましたが、そのファイルには行番号 530 がありません。518までしかありません。

4

3 に答える 3

4

私の場合、これは関数の無限再帰が原因で発生していました。xDebug 拡張機能を PHP に追加すると、関数呼び出しの制限により、正確なエラーがスローされました。

于 2012-11-07T15:27:28.900 に答える
1

xdebugでアプリをプロファイリングします。どの関数がどのくらいの頻度で呼び出され、どれだけのメモリを消費するかがわかります。

于 2012-11-06T22:55:01.383 に答える
0

致命的なメモリ エラーのため、デバッグが難しいことに注意してください。これは、デバッガを実行するのに十分なメモリが残っていない可能性があるためです。

たとえば、100 バイト残っていると、あまり実行できなくなります。したがって、シャットダウン機能の結果は異なります。

存在しない行番号については..ファイルが eval() を実行している、別のファイルを引き込んでいる、または誤った行番号を引き起こす可能性のある何かを出力している可能性はありますか? そのファイルと呼び出し元のファイルを読んで、それがどのように実行されるかを確認します。私は Yii フレームワークに詳しくありません。

于 2012-11-06T14:27:54.070 に答える