主要結構是(gdb)p/x在gdb python腳本中相當於什麼?
struct my_struct
{
int x;
void* md_template;
void* md_capture_buff;
....
};
當我在做
(gdb) p ((struct my_struct *)dev_base->next->priv)
輸出是這樣
$1 = {
x= 15 '\017'
md_template = ,
md_capture_buff =
}
,當我有p/X做:
(gdb) p/x ((struct my_struct *)dev_base->next->priv)
輸出是這樣
$1 = {
x= 0xf;
md_template =0x410027001a50 ,
md_capture_buff = 0x41002c0c5490
}
在GDB-蟒:
python val = gdb.parse_and_eval('((struct my_struct *)dev_base->next->priv)')
python print val
的輸出是:
$1 = {
x= 15 '\017'
md_template = ,
md_capture_buff =
}
那麼如何在gdb-python中編寫等同於p/x的代碼呢?或者如何在Python腳本中獲取'md_capture_buff'的地址,因爲python val = gdb.parse_and_eval('((struct my_struct *)dev_base->next->priv)').address
不會保留地址?
@tromey,謝謝。但是,如果一個數組作爲成員出現時遍歷一個結構,那麼如何以十六進制打印整個數組的值(更具可讀性)。只有'p/x'纔有可能。但是我們不能在遍歷中使用'gdb.execute'('p/x')'。我想在這個腳本中實現這個http://stackoverflow.com/questions/16787289/gdb-python-parsing-structures-each-field-and-print-them-with-proper-value-if。請讓我知道是否有辦法做到這一點。我們可以控制打印數組,因爲指針是在這個腳本中完成的嗎? –
沒有一個簡單的方法。 –
我試圖避免parse_and_eval(),但我不知道如何直接讀取結構指針沒有它。假設OP的問題,我可以使用什麼API來避免使用parse_and_eval()? –