gdbデバッグphp-cp拡張redisProxyとpool_serverの長い接続

1881 ワード


1.gdbのインストール
sudo apt-get install gdb

2.php-cp拡張ディレクトリ(コンパイル済み)に入り、ソースコード
https://github.com/swoole/php-cp

デバッグする関数の実際の関数名zim_を取得redis_connect_pool_select
$ nm connect_pool.so

....
0000000000012170 t zim_redis_connect_pool___construct.localalias.9
0000000000012160 T zim_redis_connect_pool___destruct
0000000000012910 T zim_redis_connect_pool_done
00000000000120a0 T zim_redis_connect_pool_release
0000000000012350 T zim_redis_connect_pool_select #    
00000000000120c0 T zim_redis_connect_pool_setAsync
0000000000016ca0 T zim_swSerialize___construct
0000000000019680 T zim_swSerialize___destruct
....

3.gdbデバッグに入る
$ gdb php

...
(gdb) break zim_redis_connect_pool_select  #  ,    
Function "zim_redis_connect_pool_select" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (zim_redis_connect_pool_select) pending.
(gdb) run /usr/local/openresty/nginx/html/test_connect_pool.php #    ,               
Starting program: /usr/bin/php /usr/local/openresty/nginx/html/test_connect_pool.php
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, zim_redis_connect_pool_select (execute_data=0x7ffff321d160, 
    return_value=0x7fffffffa640)
    at /mnt/share/php-cp/connect_pool_client.c:1135
1135	{
(gdb) l                     //  l
1130	    zend_update_property_string(redis_connect_pool_class_entry_ptr, object, ZEND_STRL("auth"), auth TSRMLS_CC);
1131	
1132	}
1133	
1134	PHP_METHOD(redis_connect_pool, select)
1135	{
1136	    zval *ip, *port, *z_args, *pass_data, *object, *auth;
1137	    char source_char[CP_SOURCE_MAX] = {0};
1138	    char *db;
1139	    zend_size_t db_len;
(gdb) 

通信プロセス:共有メモリ、pipe、reactorモード