- 论坛徽章:
- 0
|
可以写一个shell printStruct.sh,不用修改原C文件, 用法如下(也算元编程吧):
如执行文件为printStruct.o , 要打印变量family:
simon@lionteeth:~/test$ ./printStruct.sh printStruct.o family
Output如下:
$1 = {
leader = {
name = "Maggie\000\000\000",
age = 18,
married = 0
},
worker = {
name = "Simon\000\000\000\000",
age = 99,
married = 1
}
}
源码如下:
simon@lionteeth:~/test$ cat printStruct.c
typedef struct {
char name[10];
int age;
int married;
} Person;
typedef struct {
Person leader;
Person worker;
} Team;
Team family = {
.leader = {
.name = "Maggie",
.age = 18,
.married = 0
},
.worker = {
.name = "Simon",
.age = 99,
.married = 1
}
};
int main(void* argv[], int argc)
{
return 0;
}
simon@lionteeth:~/test$ gcc -g printStruct.c -o printStruct.o
simon@lionteeth:~/test$ cat printStruct.sh
#/bin/bash
echo "set print pretty on" > gdb.in
echo "p $2" >> gdb.in
echo "quit" >> gdb.in
gdb $1 < gdb.in > gdb.out
nawk '
/\$1 =/ { process = 1; print $0; next }
process == 0 { next }
{
print $0
}
' gdb.out|sed 's/(gdb)//g'
simon@lionteeth:~/test$ ./printStruct.sh printStruct.o family
$1 = {
leader = {
name = "Maggie\000\000\000",
age = 18,
married = 0
},
worker = {
name = "Simon\000\000\000\000",
age = 99,
married = 1
}
} |
|