gdb を使用した PHP 拡張機能のデバッグ
出典: http://www.codefrom.com/paper/%E4%BD%BF%E7%94%A8gdb%E8%B0%83%E8%AF%95p...
PHP 拡張機能は c/c++ を使用して開発され、gdb を使用して簡単にデバッグできます。具体的な手順は次のとおりです。
まず、php をコンパイルするときに ** --enable-debug** パラメータを追加する必要があります
./configure --enable-debugmake && make install
私の ubuntu マシンでテストしたところ、拡張ディレクトリはデフォルトになっています/usr/ local/lib/php/extensions/debug-non-zts-20131226/
これは、PHP ソース コードをデバッグする場合にも非常に便利です。
次のステップは拡張機能を作成することです。PHP ソース コードの ext ディレクトリに入り、
./ext_skel --extname=mydebug
を実行します。mydebug ディレクトリが現在のディレクトリに自動的に生成されます。ディレクトリに入り、 config.m4 ファイルを編集し、次のように 10 ~ 12 行の dnl を削除します
PHP_ARG_WITH(mydebug, for mydebug support,Make sure that the comment is aligned:[ --with-mydebug Include mydebug support])
最後の行に
if test -z "$PHP_DEBUG"; then AC_ARG_ENABLE(debug, [--enable-debg compile with debugging system], [PHP_DEBUG=$enableval], [PHP_DEBUG=no] )fi
を追加しますこれは、拡張機能をデバッグできることを意味します。拡張機能をコンパイルするには、コマンド
phpize ./configure --enable-debugmake && make install
を使用します。ここで、phpize と php-config は事前に環境変数を設定してから、拡張機能をロードする必要があります。私のマシンのアドレスは /usr/local/lib/php/extensions/debug-non-zts-20131226/ です。 mydebug 拡張ソース コード ディレクトリを入力します。デフォルトで生成される関数はconfirm_mydebug_compiled で、mydebug.c で定義され、自動生成される関数を拡張します。
PHP_FUNCTION(confirm_mydebug_compiled){ char *arg = NULL; int arg_len, len; char *strg; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) { return; } len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "mydebug", arg); RETURN_STRINGL(strg, len, 0);}
おそらく、文字列パラメーターを取得し、それを文字列に綴って返すことを意味します。 nm コマンドを使用して、生成された mydebug.so によってエクスポートされたシンボルを表示します。
运行 nm mydebug.so返回 zif_confirm_mydebug_compiled ……
PHP_FUNCTION は実際には関数名の前に zif_ を追加し、gdb デバッグを実行します
第一步运行: gdb php然后运行: break zif_confirm_mydebug_compiled终端提示:Function "zif_confirm_mydebug_compiled" not defined.Make breakpoint pending on future shared library load? (y or [n]) 输入: y输入: run /tmp/test.php此时会回显:Breakpoint 1, zif_confirm_mydebug_compiled (ht=1, return_value=0xb7bf0d44, return_value_ptr=0xb7bd6104, this_ptr=0x0, return_value_used=1) at /...../php-5.6.6/ext/mydebug/mydebug.c:56然后输入: l显示:54 PHP_FUNCTION(confirm_mydebug_compiled)55 {56 char *arg = NULL;57 int arg_len, len;58 char *strg;5960 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
ファイル /tmp/test.php の内容は次のとおりです:
<?phpecho confirm_mydebug_compiled("hello world");
ご覧のとおり、関数のソース コードが公開されており、デバッグに一般的な gdb コマンドを使用できます。
さらにエキサイティングなオリジナル コンテンツは http://www.codefrom.com/ にあります

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

Laravelのサービスコンテナとサービスプロバイダーは、そのアーキテクチャの基本です。 この記事では、サービスコンテナ、詳細サービスプロバイダーの作成、登録、および実用的な使用法を例で説明します。 Oveから始めます

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。
