变量的追踪
struct people{
int age;
int num;
};
struct people * you;
调试程序时,总是想观察某个数据的值,使用print可以输出某个变量的值,当然,你也可以输出某个结构体的值,前提是你有一个指向该结构体的指针p。如
使用print/p
则,只要在合适的断点处,使用下面的命令,就可以输出这个结构体的所有成员的值。
(gdb)p *you
$1 = { age = 4, num = 5}
假设有一个数组int a[10],使用命令
(gdb)p a
$1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
当时如果这个数组是动态创建的,如int *a = (int *)malloc(10 * sizeof(int));,则会有不同
(gdb)p a
使用上面的命令只会输出数组中的第一个元素,为了输出整个输出,可以使用下面的命令
(gdb)p *a@10
使用display/p
另外一个有用的输出命令是display/disp,这个命令会在每一次程序中断执行时,输出某个变量的值。遇见断点,单步调试等,只要中断一次,就输出一次,这样就省的每次都输入命令。
使用commandsl
使用commands命令,你可以做更多,你可以输入一串命令,做你想做的很多事。不光可以输入gdb命令,还可以使用call命令,调用代码中的某个函数。假设,你有一个队列输出函数printqueue(queue ),你可以如下,在某个断点处调用这个函数。
(gdb)commands identifier
Type commands for when breakpoint 1 is hit, one per line.
End with a line saying just "end".
>call printqueue(queue);
>end
这样,每当到达identifier标定的断点,都会调用函数printqueue。如果想取消这个函数调用,只需使用如下命令
(gdb)commands identifier
Type commands for when breakpoint 1 is hit, one per line.
End with a line saying just "end".
>end