c - 我可以在调试时准确控制函数返回的内容(即 rand())吗?
问题描述
假设我有以下代码行:
int a = rand();
int b = rand();
int c = rand();
在调试时,有什么方法可以使“rand()”分别返回 1、2、3 到变量 a、b 和 c?
如果不是(我认为很可能是这种情况),是否有一种简单的 Ctrl-F 替换方法,我可以在调试时硬编码这些值?
解决方案
一种选择是使用预处理器宏来“覆盖”该rand
函数,并使用-DDEBUG
.
#ifdef DEBUG
#define rand() debug_rand()
static int debug_rand() {
static int n = 1;
return n++;
}
#endif
根据项目的复杂性,您可能希望通过附加条件#ifdef
和#undef
条件来控制其范围。
或者,您可以有条件地调整您的srand
通话。
#ifdef DEBUG
srand(1);
#else
srand(/* your usual seed gen */);
#endif
这会导致您的程序以可预测的方式运行。
您可以编写一个单独的程序来映射系统上N rand()
次调用返回的默认值集,并将其用作参考表。
推荐阅读
- reactjs - 使用 useContext 和 style-components 时如何初始化主题
- python - 无法使用来自 `subprocess.run` 的 `git check-ignore`
- java - 使用 nohup 命令 getRuntime().exec 后 java logger 找不到日志文件
- node.js - 在 MongoDB 中查找数组中至少包含 3 个条目的元素
- grafana - Grafana 向图中添加新过滤器
- python - 舍入和更新列表中的元素
- bash - 如何按属性而不是 cn 对 ldap 搜索结果进行分组。使用 bash
- go - 如何在 Windows 上正确安装 gomobile?
- javascript - 如何重置引导向导
- javascript - 如何使用后端和页码更新表中的内容