一直想要在C语言的程序中输出变量的类型,但是没有类似PHP中的var_dump函数,通过搜索得知可以使用gdb程序来调试C程序,gdbLinux平台上常用的调试工具了,搭配gcc使用。

简单版

先创建一个源文件main.c

#include <stdio.h>
int main(void)
{
    int a[3] = {1,2,3}
    return 0;
}

使用gcc编译,必须要带-g参数,否则无法使用gdb调试

gcc -g main.c -o main

开始使用gdb调试

$gdb main
## 进入gdb调试环境
(gdb) break main    // 在 main 函数处设置断点
Breakpoint 1 at 0x1129: file main.c, line 3.
(gdb) run    // 启动程序
Starting program: ../main 

Breakpoint 1, main () at main.c:3
3               int a[3] = {1,2,3};
(gdb) print a    // 打印 a
$1 = {1, 2, 3}
(gdb) ptype a    // 打印 a 的类型
type = int [3]
(gdb) q     // 退出

使用gdb打印数组array

在C语言中,由于数组名也是地址类型的,所以使用在gdb使用print只会打印出内存地址,可能无法打印出全部的数组元素,特别是二维数组或者多维数组的情况下。

通过搜索gdb print arrayHow to view a pointer like an array in GDB?找到了打印数组(array)的方法

p *array@len
# p 表示 print
# array 表示需要打印的数组名
# len 表示要打印的长度

以上就是gdb的简单使用,更高级的使用可以阅读以下链接:
GNU Debugger Tutorial
GDB调试工具总结
用GDB调试程序
《100个gdb小技巧》

或者其他网络上关于gdb的教程

gdb print 格式化输出

微信图片_20210331133236.png

微信图片_20210331133226.png

例如(gdb) print /x expr


本文参考:
gdb 查看内存 及 变量类型

标签: none

评论已关闭