GDB 操作笔记:以 OpenFOAM Laplacian 跟踪为例
GDB 相关操作笔记(OpenFOAM-Laplacian 跟踪示例)
常用命令总结
1 |
|
GdbOF专属命令:

1. 启动与附加调试
启动可执行文件并进入 GDB
- gdb /path/to/blockMesh
直接在程序启动时就运行
- (gdb) run [args]
对正在运行的进程进行附加调试
- (gdb) attach
2. 设置断点
- 在函数层设置断点(需要源码或符号信息)
- (gdb) break laplacian
- 在具体文件和行号设置断点
- (gdb) break path/to/file.C:1234
- 在 main 函数入口设断点
- (gdb) break main
- 条件断点(只有满足条件时才触发)
- (gdb) break path/to/file.C:1234 if (i == 0)
3. 运行与定位
- 运行到断点
- (gdb) run
- 查看当前断点处的调用栈
- (gdb) bt
- (gdb) bt full # 显示更详细的局部变量
- 在不同栈帧之间切换
- (gdb) frame 0
- (gdb) frame 2
4. 查看变量与内存
- 查看当前帧的局部变量
- (gdb) info locals
- (gdb) info args
- 打印变量的值
- (gdb) print varName
- (gdb) p varName
- 查看指针指向的内容
- (gdb) print *ptr
- (gdb) print ptr->field
- 查看数组/向量
- (gdb) print arr[0]
- (gdb) print arr[i]
- 查看结构体/自定义对象
- (gdb) p myStruct
- (gdb) p myStruct.field
5. 单步执行
- 跳过函数内部,逐步执行当前语句
- (gdb) next
- 进入函数内部逐步执行
- (gdb) step
- 继续执行至下一个断点或结束
- (gdb) continue
- 在任意行设置新的断点后继续执行
- (gdb) break file.C:line
- (gdb) continue
6. 观察变量变化
- 观察变量值的变化(触发时暂停)
- (gdb) watch varName
- 取消观察
- (gdb) delete watch varName
- 条件断点(变量达到某值时断点触发)
- (gdb) break file.C:line if (varName > 0)
7. 断点管理
- 查看当前所有断点
- (gdb) info breakpoints
- 删除断点
- (gdb) delete
- (gdb) delete 1 2 3 # 删除指定序号的断点
- 重新启用/禁用断点
- (gdb) enable
- (gdb) disable
8. 内存与调试辅助
- 打印复合类型的字段并逐步调试
- (gdb) p obj.field
- 调用外部函数输出
- (gdb) call printf(“x = %d\n”, x)
9. 与 OpenFOAM 相关的调试实践要点
- 启用调试信息
- 确保编译时带 -g,OpenFOAM 常用的调试构建可用。
- 尽量在关键点设置断点
- laplacian 的入口、派生类创建点、fvSchemes 的选择点等位置。
- 并行调试提示
- MPI 场景下,可能需要为不同进程分别 attach 或在 mpirun/mpiexec 层面开启调试参数。
- 日志与复现
- 同时查看 OpenFOAM 日志输出,确保断点处的变量与日志信息一致,便于复现与定位。
10. 简单工作流示例(假设调试 laplacian 的路径)
- 步骤 1: 启动 GDB
- gdb /path/to/blockMesh
- 步骤 2: 设置断点(假设定位到 laplacian 的实现文件)
- (gdb) break path/to/laplacianFoam.C:120
- (gdb) break gaussLaplacianScheme.cpp:45
- 步骤 3: 运行
- (gdb) run
- 步骤 4: 到达断点后查看
- (gdb) bt
- (gdb) info locals
- (gdb) print Gamma
- (gdb) print vf
- 步骤 5: 单步调查
- (gdb) step
- (gdb) next
- 步骤 6: 动态观察
- (gdb) watch Gamma
- (gdb) continue
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
