背景GCC gprof的/ gcov的/其他 - 如何获得函数调用序列/出口+控制流语句
我们有我们的嵌入式GUI产品测试,当测试者宣称“测试失败”,有时它是很难让我们的开发人员重现确切的问题,因为我们没有确切的发生的事情。
我们目前有一个日志框架,但我们开发人员必须在代码中手动输入这些日志语句,这很好。 。 。除非发生难以重现的错误,并且我们在“正确”位置没有记录声明,然后重新构建时,使用相同步骤重新运行测试,我们会得到不同的结果。
发行
愿我们的解决方案,其中编译器生成额外的仪器代码,让我们看到确切的序列事件包括,在最低:
- 功能输入/退出(已由
-finstrument-functions
提供) - 控制流程语句输入即输入if/else,哪个案例状态换货我们跃升为
日志是这样的:
int main() entered
if-line 5 entered
else-line 10 entered
void EventLoop() entered
. . .
一些其他可有可无的富人是
-
在函数入口
- 参数值AND出口(用于通按引用类型)
- 函数返回值
问题
是否有任何gcc
工具,甚至支付工具,可以自动执行此仪器?
听起来好像你需要一个调试器 – EOF
@EOF我们有一个调试器调试器不会记录这个调试器te跟踪。但即使这样做,我们也希望能够在不使用调试器的情况下跟踪 – Adrian
除非您有很多尾部调用优化,否则堆栈跟踪应该为您提供所需的调用顺序。也许你可以通过发送适当的信号让测试人员产生一个coredump? – EOF