0

言い換えると、アドレスでシンボルを見つけることができるコマンドはありますか? ptype show this symbol's detail info を使用しますか? または、存在しない場合、このニーズを満たすユーザー定義コマンドをどのように記述できますか?</p>

たとえば、ptype を使用してデータ構造体の詳細情報を次のように表示するよりも、「情報シンボル」コマンドを使用してアドレスで最初にデータ構造体の名前 (ngx_errlog_module_ctx) を取得できます。</p>

(gdb) info symbol 0x80b4568
ngx_errlog_module_ctx in section .data of /usr/local/nginx/sbin/nginx

(gdb) ptype ngx_errlog_module_ctx
type = struct {
    ngx_str_t name;
    void *(*create_conf)(ngx_cycle_t *);
    char *(*init_conf)(ngx_cycle_t *, void *);
}

しかし今、次のように使用できるユーザー定義のコマンド (ptype_with_address) をどのように記述できますか :

ptype_with_address 0x80b4568

ngx_errlog_module_ctx in section .data of /usr/local/nginx/sbin/nginx
type = struct {
ngx_str_t name;
    void *(*create_conf)(ngx_cycle_t *);
    char *(*init_conf)(ngx_cycle_t *, void *);
}

私はnginxのコードを研究しているので、これをやりたいです。各モジュールのctxメンバー変数を含めて、すべてのngx_modulesの詳細情報を表示するユーザー定義コマンドを書きたいです。

4

1 に答える 1

0

このニーズを満たすユーザー定義コマンドを作成できますか

かなり新しいバージョンの GDB を使用している場合は、組み込みの Python インタープリターを使用して目的を達成できるはずです。

gdb.Symbol残念ながら、そのアドレスからを取得できないようです。シンボル名が必要です。info symbolつまり、現在 GDB で Python インタープリターに公開されているようには見えません。

アドレスも受け入れるように拡張するには、バグジラに機能リクエストを提出することをお勧めします。gdb.lookup_global_symbol

「gdb python info symbol」をグーグルで検索すると、このスレッドが明らかになり、Tom Tromey (gdb 開発者) も bugzilla の問題を報告するように依頼し、回避策を提案しました。

于 2012-07-02T05:24:39.523 に答える