【发布时间】:2018-08-22 12:55:13
【问题描述】:
假设我在一个系统中有 3 个可以调用或不调用的函数。 稍后在我的算法中(参见下面的“myMainFunction()”),我很想知道是否调用了所有函数。
实际上,为了跟踪我的函数是否被调用,我使用了一个设置 16 位域的辅助函数:
static void SetBitField(u16 p_Bitfield, u8 Bit)
{
u16 tmp_Bitmask;
tmp_Bitmask = (u16)((u16)(1) << (u16)(Bit));
*p_Bitfield |= tmp_Bitmask;
}
现在在我的函数中,我正在执行以下操作:
static u16 BitMask;
#define SHIFT_0 0
#define SHIFT_1 1
#define SHIFT_2 2
#define MASK 7
fun1()
{
/*doing some stuff*/
SetBitField(&BitMask,SHIFT_0)
}
fun2()
{
/*doing some stuff*/
SetBitField(&BitMask,SHIFT_1)
}
fun3()
{
/*doing some stuff*/
SetBitField(&BitMask,SHIFT_2)
}
现在在主函数中,我可以检查是否调用了所有函数
myMainFunction()
{
/*doing some stuff*/
if ((BitMask & MASK) == MASK)
{
/*all functions are called*/
}
/*doing some stuff*/
}
到目前为止还不错。但最后,无论函数调用的顺序如何,我都会得到相同的 BitMask。 但是如何修改 SetBitField() 函数,以便以后检查我的函数是否按特定顺序调用。 例如检查是否调用了 func1() --> func2() --> func3() 而不是例如 func2() --> func1() --> func3()?
有什么想法吗?
【问题讨论】:
-
您需要将该信息存储在某处。创建单独的多个位域并存储位域历史,有一个位域数组来存储哪个函数首先运行,分配一个字符串来存储函数名。
-
这对我来说就像一个XY problem。 为什么您需要按特定顺序调用函数?你想通过这个解决的实际问题是什么?如果你正在编程,为什么不能确保函数按照你想要的顺序被调用?
-
可能使用一些日志记录?如果你只有 3 个函数,你可以设置最高位,然后右移 SHIFT_X 次,然后你就可以解码了,
-
除了上述 cmets 之外,这似乎可以通过
gdb轻松完成,而且总的来说它是学习如何使用的好工具。我会推荐。 -
@perreal 你可以在上面的例子中展示这个吗?
标签: c