【发布时间】:2020-02-17 16:28:05
【问题描述】:
我有一个 C++ 程序,它使用 OpenCV 处理图像并跟踪其中的对象。在大多数情况下,它运作良好。但是我得到的结果不一致。也就是说,大约 10% 的时间,我得到的输出值略有不同,我不知道为什么。我没有任何随机电话;我已经运行 valgrind 来寻找未初始化的内存;我已经对其进行了 clang-tools 静态分析。没有运气。不一致的运行具有几个不同的输出之一,因此它们不是完全随机的。
是否有工具可以告诉我两次运行的分歧?如果我运行 gprof 或者 cflow,我可以比较它们,看看有什么不同吗?我可以使用其他工具或流程吗?
编辑:感谢您的反馈。我相信这是由于线程和竞争条件造成的;这个建议很有帮助。我目前使用的建议来自:Ways to Find a Race Condition
【问题讨论】:
-
在调试器中设置条件断点?
-
有些CV处理并不总是一致的,只要结果有效就没有问题。
-
你在使用多线程吗?任何浮点数学?我假设您每次都使用完全相同的输入(在同一台机器/编译器/构建上)?