【GDB调试】如何在不使用打印日志的情况下完全使用gdb调试函数或每一行代码,gdb如何打断点及断点查看变量或函数返回值,函数参数值

要在不使用打印日志的情况下完全使用 GDB 调试程序,可以按照以下步骤进行操作:

1. 编译程序时添加调试信息

确保在编译代码时加入 -g 选项以生成带有调试信息的可执行文件。例如:

 

bash

g++ -g -o xxxInfo main.cpp xxxInfo.cpp ...

如果你使用的是 qmake(如 .pro 文件),确保没有禁用调试信息。默认情况下,Qt 的 qmake 在 Debug 模式下会自动添加 -g


2. 启动 GDB 并加载程序

运行以下命令启动 GDB 并加载你的程序:

 

bash

gdb ./xxxinfo


3. 设置断点

在函数上设置断点
  • 按函数名设置断点

     

    gdb

    break `function_name`

    例如:

     

    gdb

    break `xxxInfo::parseXxxData`

  • 查看类中的所有函数(用于确定要打断点的函数):

     

    gdb

    info functions xxxInfo

在某一行代码设置断点
  • 按文件和行号设置断点
     

    gdb

    break filename.cpp:line_number

    例如:
     

    gdb

    break xxxInfo.cpp:45

查看已设置的断点
 

gdb

info breakpoints

删除或禁用断点
  • 删除某个断点
     

    gdb

    delete breakpoint <breakpoint_number>

  • 禁用某个断点
     

    gdb

    disable breakpoint <breakpoint_number>

  • 启用某个断点
     

    gdb

    enable breakpoint <breakpoint_number>


4. 运行程序并触发断点

在 GDB 中运行程序:

 

gdb

run

程序会在你设置的断点处暂停。


5. 单步调试

  • 逐行执行代码(进入函数)
     

    gdb

    step

  • 逐行执行代码(跳过函数调用)
     

    gdb

    next

  • 继续执行直到下一个断点或程序结束
     

    gdb

    continue


6. 查看变量、函数参数和返回值

查看变量值
 

gdb

print variable_name

例如:

 

gdb

print xxxId

查看局部变量
 

gdb

info locals

查看函数参数

当程序停在函数入口时,可以使用:

 

gdb

info args

查看函数返回值(仅限最近一次函数调用)

如果函数已经返回,可以通过寄存器查看返回值(适用于 x86 架构):

 

gdb

print $eax

如果是结构体或大对象,可能需要查看多个寄存器或内存地址。


7. 其他常用调试命令

  • 查看当前堆栈信息

     

    gdb

    backtrace

  • 切换堆栈帧

     

    gdb

    frame <frame_number>

  • 查看源代码

     

    gdb

    list

  • 查看内存内容

     

    gdb

    x/<format> <address>

    例如:

     

    gdb

    x/10xw 0x7fffffffe000 # 查看 10 个字(word)的内存内容


示例流程

假设你想调试 xxxInfo.cpp 中的 parsexxxData 函数:

  1. 设置断点:
     

    gdb

    break xxxInfo.cpp:45

  2. 运行程序:
     

    gdb

    run

  3. 程序停在断点后,查看变量:
     

    gdb

    print xxxName

  4. 单步执行:
     

    gdb

    step

  5. 继续执行到下一个断点:
     

    gdb

    continue

通过这些步骤,你可以完全依赖 GDB 调试你的程序,无需插入任何日志输出语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值