【发布时间】:2016-03-01 14:29:22
【问题描述】:
我在嵌入式系统上使用 C/CPP,在我的代码中,我有一些部分是从一些“无效”的内存中运行的,并且在满足某些条件之前不得调用。
为简单起见:
假设foo() 是这样的功能并且在g_isMemoryValid == false 时无效
除了 foo() 之外,无效内存部分还有几个其他函数,每个函数都来自所有模块的多个调用。
我的问题是找到我输入无效部分的所有实例并验证我没有错过任何电话!
如何确保运行foo() 的所有分支都满足g_isMemoryValid == true
解决方案应该输出:
跳转到代码(或指令地址)的行,
但即使它只会发出模块名称,
或者地狱...... [OK,NOT_OK] 会做:)
注意:即使只解决部分场景的解决方案也可以!
请注意,除了简单的if(g_isMemoryValid) 包装器之外,还有许多场景,例如调用链本身的调用函数在不满足条件时不被调用或分支的某些不同语法
if (g_isMemoryValid)
foo(); // should pass
if (!g_isMemoryValid)
return;
foo(); // should pass too
【问题讨论】:
-
将它们包裹在一个互斥锁中,当
g_isMemoryValid变为真时该互斥锁解锁? -
您是否可以访问
foo()的源代码,以便您可以修改函数本身?或者,您可以为foo()实现包装函数吗? -
#define CHECKED_FOO() if (g_isMemoryValid == true) foo(); -
@LPs 您应该将其发布为答案。
-
我不明白您的问题,您知道如何检查条件以及仅在条件为真时如何调用函数,所以这不是问题。您是在要求最“优雅”的方式吗?那么“优雅”按谁呢?这是一个非常基于意见的问题。此外,按照某些人的建议使用宏似乎很诱人,但恕我直言,这不是一个“优雅”的解决方案,而且对正在发生的事情非常不透明。
标签: c++ c embedded verification