我可以在调试时准确控制函数返回的内容(即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()调用返回的默认值集,并将其用作参考表。