gdb调试检查某个指针是否为空

  • 先使用gdb --args 命令运行程序
  • 二、使用print 查看具体变量的值
  • 2.1 、找到出错的线程
  • 2.2、打印变量



gdb调试检查某个指针是否为空

gdb调试查看某个具体变量的值

先使用gdb --args 命令运行程序

gdb --args是 GDB(GNU Debugger)调试工具中的一个命令选项。它用于在启动要调试的程序时,将命令行参数传递给被调试的程序。这在调试需要接收特定命令行参数才能正确运行和测试的程序时非常有用。

假设你有一个 C 程序my_program,它从命令行接收两个整数参数并对它们进行一些计算,比如一个简单的加法程序,代码可能如下:

#include <stdio.h>
int main(int argc, char *argv[]) {
    if (argc!= 3) {
        printf("Usage: %s <num1> <num2>\n", argv[0]);
        return 1;
    }
    int num1 = atoi(argv[1]);
    int num2 = atoi(argv[2]);
    int result = num1 + num2;
    printf("The result is: %d\n", result);
    return 0;
}

正常情况下,你可以在终端中这样运行这个程序:./my_program 5 3,它会输出The result is: 8。
但是当你想调试这个程序并且传递命令行参数时,就可以使用gdb --args。
具体步骤如下:
首先,使用

gdb --args my_program 5 3

命令。这会启动 GDB 并将my_program作为要调试的目标程序,同时将5和3作为命令行参数传递给my_program。

二、使用print 查看具体变量的值

2.1 、找到出错的线程

如果你的程序是多线程的,你需要切换到发生错误的线程。

gdb调试检查某个指针是否为空_GDB


根据上面的图像提供的信息,可能是线程8。

(gdb) thread 8

2.2、打印变量

分别打印两个变量

(gdb) print cam1_info->e_intrinsic
(gdb) print cam2_info->e_intrinsic

发现第二个变量为为nullptr

gdb调试检查某个指针是否为空_命令行_02


则在程序中对这个参数进行非法校验,防止再发生coredump