终端gdb & dune的入门级应用

下面是一个整理和概括了上述内容的完整格式,旨在提供一个清晰的步骤指南,帮助你使用 GDB 调试 C 程序,以及使用 Dune 构建和测试 OCaml 项目。

使用 GDB 调试 C 程序
- 在当前目录编译:
  gcc -g example.c -o example
  或者指定路径编译:
  gcc -g path/example.c -o path_to_where_to_store/example
- 启动 GDB 并加载你的程序:
  gdb example

在GDB中设置断点
- 在函数处设置断点,例如 `main`:
  break main
- 在指定行设置断点,例如第 10 行:
  break example.c : line_number

(gdb) tui enable
gdb tui enable命令在终端中启用了GDB的文本用户界面模式,提供了同时显示源代码和调试信息的功能。
- tui disable:禁用TUI模式,返回到普通的GDB模式。

- info breakpoint:显示所有断点及其位置。
- disable 2:禁用编号为2的断点,但保持其位置不变。
- enable 2:重新启用编号为2的断点。
- clear myFunction:移除函数名为phase01()的断点。
- delete 2:移除编号为2的断点。
- break:在当前行设置一个断点。
- break myFunction
- clear example.c:100
- break lineNumber if condition -- 仅当满足指定条件时,才在指定行号上设置断点
enter 会重复先前的指令
- set args hi bye 2:设置命令行参数为 hi bye 2
- show args:显示当前命令行参数。更改参数需要重新启动程序才能生效
- run:从头开始运行程序。除非设置了断点,否则会一直运行到完成
- kill:终止正在运行的程序。通常用于在出现故障之前重新运行程序
- file program:加载程序并开始调试。方便的重新加载编译后的可执行文件

运行程序
run

终端args
1.gdb xxx args
2.gdb xxx
set args ...  -> run 
run args

调试中的操作
- 查看变量的值:
  print variableName // print /t variable_names ->二进制
- 显示当前函数的局部变量:
  info locals
- 显示调用栈:
  backtrace

单步执行和继续运行
- 执行下一行(不进入函数内部):
  next / next 4
- 如果下一行是函数调用,进入该函数:
  step
- 从函数内部返回到函数调用的下一行:
  finish
- 继续执行直到下一个断点:
  continue

退出 GDB
  quit
list -- 显示当前断点附近的源代码,帮助你理解程序的上下文。
修改变量值 -- set var variableName = value

使用 Dune 构建和测试 OCaml 项目

1. 编译

- 在项目根目录下编译 OCaml 项目,检查错误,并验证 `.mli`(接口)文件是否被 `.ml` 文件实现。这将为所有组件生成对应的 `.cma` 和 `.exe` 文件:
  dune build

2. 修改后的编译

- 如果你修改了某个 `.ml` 文件,可以单独编译该组件:
  dune build xxxxx.cma

- 然后运行对应的 `.exe` 文件:
  dune exec xxxxx.exe

3. 运行测试

- 一次性运行所有测试用例:
  dune runtest
- 使用 `-w`(watch 模式)自动监视代码变化并重新运行测试:
  dune runtest -w
  dune runtest -w` 与 `dune runtest` 的区别在于,`-w` 会持续监视代码文件的变化,并在检测到变化时自动重新运行测试用例,而不需要每次手动触发。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值