首页 > 解决方案 > 我可以在调试时准确控制函数返回的内容(即 rand())吗?

问题描述

假设我有以下代码行:

int a = rand();
int b = rand();
int c = rand(); 

在调试时,有什么方法可以使“rand()”分别返回 1、2、3 到变量 a、b 和 c?

如果不是(我认为很可能是这种情况),是否有一种简单的 Ctrl-F 替换方法,我可以在调试时硬编码这些值?

标签: cdebuggingrandommocking

解决方案


一种选择是使用预处理器宏来“覆盖”该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()次调用返回的默认值集,并将其用作参考表。


推荐阅读