2012-06-30 55 views
0

換句話說,是否有命令可以在某個地址找到該符號,同時使用ptype顯示該符號的詳細信息? 或者如果沒有,我怎麼能寫一個用戶定義的命令滿足這一需要?如何將兩個不同的gdb命令「info symbol」和「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 *); 
} 

,但現在,我怎麼能寫一個用戶difined命令(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成員變量。

回答

0

可我寫了一個用戶定義的命令滿足這一需求

如果你有一個比較新的GDB的版本,你應該能夠使用內置的Python解釋器來實現自己的目標。

不幸的是,它看起來不像你可以從它的地址gdb.Symbol,你的need the symbol name。換句話說,它看起來不像info symbol目前暴露給GDB中的Python解釋器。

我建議在bugzilla中提交一個功能請求,以便將gdb.lookup_global_symbol擴展爲也接受一個地址。

谷歌搜索「gdb python信息符號」顯示此thread,其中Tom Tromey(gdb開發人員)也要求提交bugzilla問題,並提出了一種解決方法。

相關問題