2012-12-19 129 views
3

我想添加一個新的命令到gdb源代碼,我可以使用add_cmd來實現。GDB內部:獲取變量內容

在命令後端,我想讀取一些變量的內容並以更相關的格式打印數據給我。

我可以用下面的代碼獲取變量地址:

struct symbol *sym; 

sym = lookup_symbol ("my_variable_name", get_selected_block (&context_pc), VAR_DOMAIN, NULL); 

printf_filtered ("Symbol %s is ", sym->ginfo.name); 
printf_filtered (" at address 0x%x\n", SYMBOL_VALUE(sym)); 

這使我的變量的地址:

(gdb) my_command 
Symbol my_variable_name is at address 0x8049684 

但是,我無法找到什麼API將給我這個變量的內容。需要相同的幫助。

回答

1

在命令後端,我想讀取一些變量的內容並以更相關的格式打印數據給我。

這是非常可能,你可以使用Python pretty-printer達到同樣的效果。這不需要重新編譯GDB,很容易就能正確獲取,併爲GDB內部提供了一個安全的接口。

我無法找到API會給我這個變量的內容。

target_read_memory()是最低的API,它會給你在給定地址的內存內容。

+0

酷! target_read_memory()很好用! 我會看看Python漂亮的打印機 – user1917289