0

問題は、スクリプトがしばらくするとハングアップすることです。 straceは次のようなものを返します。

Process 7286 attached - interrupt to quit
restart_syscall(<... resuming interrupted call ...>) = 0
poll([{fd=13, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {1817569, 74651533}) = 0
clock_gettime(CLOCK_MONOTONIC, {1817569, 74734744}) = 0
clock_gettime(CLOCK_MONOTONIC, {1817569, 74812047}) = 0
poll([{fd=13, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
poll([{fd=13, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
....

あちこちにデバッグ メッセージを配置することは、最後の手段として残されています。

xdebugを添付してスクリプトを実行できますが、POSIX シグナルを php プロセスに送信して xdebug をトリガーし、現在のコンテキスト/スタックトレース/ローカル変数をダンプする方法はありますか?

PHPスクリプトの「事後ダンプ」を取得することは可能ですか?

4

1 に答える 1

1

Xdebug には、このための機能がありません。pcntl_signal を使用してから xdebug_print_function_stack を使用することもオプションですが、「関数トレース」を作成することもできます。これは、Xdebug がすべての関数呼び出しを発生するとすぐにディスクに書き込むようにするものです。これにより、スクリプトがハングする場所がわかります。私が見ることができるのは、それがIOを待っているということです。

関数トレースの詳細については、http: //www.xdebug.org/docs/execution_trace を参照してください。

于 2013-07-15T22:35:18.340 に答える