可以註冊蟒蛇很prointer:https://sourceware.org/gdb/onlinedocs/gdb/Writing-a-Pretty_002dPrinter.html,並用它來獲得這樣的:
(gdb) p *[email protected]
$1 = {10, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
(gdb)
這是例子蟒蛇漂亮打印機:
>cat my_printer.py
class projection_printer:
def __init__(self, val):
self.val = val
def to_string(self):
return str(self.val['size'])
import gdb.printing
def build_pretty_printer():
pp = gdb.printing.RegexpCollectionPrettyPrinter("")
pp.add_printer('projection', '^projection$', projection_printer)
return pp
gdb.printing.register_pretty_printer(gdb.current_objfile(), build_pretty_printer())
這是一個測試程序:
>cat main.cpp
#include <stdlib.h>
typedef struct angle
{
int a;
} angle_t;
typedef struct projection {
angle_t angle;
int size;
} projection_t;
int main()
{
projection_t *projections;
projections = (projection_t *)malloc(sizeof(projection_t)*10);
projections[0].size = 10;
projections[0].angle.a = 20;
return 0;
}
而這是gdb會話:
>gdb -q -x my_printer.py a.out
Reading symbols from /home/a.out...done.
(gdb) start
Temporary breakpoint 1 at 0x4005ac: file main.cpp, line 18.
Starting program: /home/a.out
Temporary breakpoint 1, main() at main.cpp:18
18 projections = (projection_t *)malloc(sizeof(projection_t)*10);
(gdb) n
19 projections[0].size = 10;
(gdb)
20 projections[0].angle.a = 20;
(gdb)
22 return 0;
(gdb) p *[email protected]
$1 = {10, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
(gdb)
-1你拒絕了兩個非常好的答案,建議在gdb中使用python或幾個指令作爲不方便,然後修改你的C代碼?你應該澄清你的「容易」的定義,這樣讀者不會浪費時間去幫助你。 – 2014-01-21 12:02:57
這些答案爲我解決問題提供了很好的信息,正如我在評論中強調的那樣。這絕對不是浪費時間,也不應該被視爲被拒絕,因爲我確信它可以幫助其他知道Python的用戶。 是的,我認爲在C代碼中添加一些指令並使用「調用」函數是一個很好的選擇,因爲它可能對每個人都有幫助。 – denaitre