0

换句话说,有没有一个命令可以在一个地址找到符号,同时使用 ptype 显示这个符号的详细信息?或者如果没有,我怎么写一个用户定义的命令来满足这个需求?</p>

例如,现在我可以先使用“info symbol”命令在地址中获取数据结构的名称(ngx_errlog_module_ctx),而不是像这样使用ptype显示数据结构的详细信息:</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 的代码,我想编写一个用户定义的命令来显示所有 ngx_modules 的详细信息,包括每个模块的 ctx 成员变量。

4

1 回答 1

0

我可以写一个用户定义的命令来满足这个需求吗

如果你有一个相当新的 GDB 版本,你应该能够使用内置的 Python 解释器来实现你的目标。

不幸的是,您似乎无法gdb.Symbol从其地址中获取 ,您需要符号名称。换句话说,它看起来不像info symbol当前在 GDB 中暴露给 Python 解释器。

我建议在bugzilla中提交功能请求以扩展gdb.lookup_global_symbol以接受地址。

谷歌搜索“gdb python 信息符号”揭示了这个线程,其中 Tom Tromey(gdb 开发人员)还要求提交一个 bugzilla 问题,并提出了一个解决方法。

于 2012-07-02T05:24:39.523 回答