7

私はEclipseとXDebugを使用して、Webサービスに依存するPHPアプリケーションを開発しています。AJAX(jQueryを使用)とcURLの2つの方法でサービスを利用するテストページがあります。

サービスページにブレークポイントを追加し、デバッガーを起動します。AJAXからサービスを呼び出すと、実行はブレークポイントで適切に停止し、変数、ステップバイステップの制御などを取得します。

しかし、cURLを使用して(つまり、PHPページ内から)サービスを呼び出すと、ブレークポイントが機能しません。「最初の行で中断」デバッガオプションをオンにしても、cURLを使用すると実行を停止できません。

デバッガーの動作ですか?cURL呼び出しに聞き手を追加する必要がありますか?URLを変更しますか?それともXDebugの制限ですか?

時間と労力をありがとう、ガイ

4

6 に答える 6

9

ブラウザなしでCurlからXdebuggerクライアントをトリガーする方法のヒントは次のとおりです。

1-コマンドラインから:

curl -H "Cookie: XDEBUG_SESSION=1" http://YOUR-SITE.com/your-script.php

2-PHPから

<?php 
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_URL, 'http://YOUR-SITE.com/your-script.php');
curl_setopt ($ch, CURLOPT_COOKIE, 'XDEBUG_SESSION=1');
curl_exec ($ch);
?>

したがって、CURLURLに「XDEBUG_SESSION= 1」を添付してもかまいませんが、必要なのはリクエストと一緒に適切なCookieを送信することです。

于 2011-10-17T19:28:32.480 に答える
9

まだコメントできないので、これを回答として投稿します。

1 つのセッションで複数の AJAX リクエストをデバッグできますか? cURL を使用してデバッグしようとしたときに、デバッグ セッションがまだ Eclipse で実行されていましたか?

それが私にとってどのように機能するかについての説明:

  1. のみを含む単純な debug.php ファイルでデバッグ セッションを開始し<?phpます。最初の行で停止し、「続行」して実行を終了します。
  2. cURL (または別のブラウザー) を使用してスクリプトを要求し、パスに ?XDEBUG_SESSION_START=ECLIPSE_DBGP を追加します (この追加はオプションだと思います)。
  3. スクリプトは、最初の行で停止したデバッグ ビューに表示されます。

これが役立つことを願っています。

于 2010-01-17T16:13:17.857 に答える
5

これはかなり古いスレッドであることは知っていますが、同じ問題で私と同じように遭遇する可能性のある他の人のために私の経験を投稿すると思いました. 私が発見したのは、リモートでデバッグしている場合 (私はいつもそうしています)、これを機能させるために php.ini でいくつかの設定を変更する必要があるということです。これが私のために働いたものです:

xdebug.remote_connect_back = false
xdebug.remote_host = {client host name or IP}

最初の設定は通常「true」で、xdebug に、HTTP 要求の発信元と同じ IP アドレスでクライアントを探すように指示します。ただし、この場合、リクエストはサーバーからのものであるため、機能しません。代わりに、2 番目の設定を使用して、クライアントの場所を xdebug に伝える必要があります。これが誰かの時間を少し節約するのに役立つことを願っています!

于 2013-01-20T04:06:39.657 に答える
2

Ajax リクエストをデバッグしている場合、そのリクエストはブラウザーによって送信され、他の(非 Ajax)リクエストと同じナビゲーション コンテキストで送信されます。これが、正常に動作する理由です。


curl によって送信されたリクエストは、別の異なるコンテキストにあります。デバッガーをそのコンテキストにフックできるかどうかはわかりませんが、おそらく...

まず、 Xdebug のドキュメントを引用して、役立つ情報を次に示します。

Xdebug には、ブラウザーから開始されたときにデバッグ セッションを追跡する機能が含まれています: Cookie。これは次のように機能します。

  • URL 変数XDEBUG_SESSION_START=nameが URL に追加されると、Xdebug は「XDEBUG_SESSION」という名前の Cookie を発行し、値としてXDEBUG_SESSION_START URL パラメーターの値を出力します。
  • GET (または POST) 変数があるXDEBUG_SESSION_START場合、または XDEBUG_SESSIONCookie が設定されている場合、Xdebug は debugclient に接続しようとします。
  • デバッグ セッションを停止する (および Cookie を破棄する) には、単に URL パラメーターを追加しますXDEBUG_SESSION_STOP。Xdebug は debugclient への接続を試行しなくなります。

そのCookieを「手動で」設定して、curlリクエストに沿って送信するとうまくいくかもしれません...

デバッグ セッションの開始時に Xdebug によって設定されるように、最初にその値を取得する必要があると思いますが、ブラウザにある Cookie を再利用することは可能です。

注 : 私はこれを試したことはありません。

于 2010-01-11T22:16:22.473 に答える
2

これとまったく同じ問題に遭遇しました。php.ini で自動開始機能をオフにして解決しました。

xdebug.remote_autostart = 0

次に、Web サービス クライアントが呼び出す Web サービス URL に API キーを追加します。

?XDEBUG_SESSION_START=<your API key here>

これが問題かどうかはわかりませんが、API キーをデバッガ (MacGDBp) に入力しました。クライアントの起動時ではなく、webervice サーバー側スクリプトが呼び出されたときにのみデバッガーが起動するようになりました。

お役に立てれば。

于 2010-06-22T03:35:23.900 に答える