我们正在跟踪的错误发生在特定的基于VxWorks的嵌入式环境中(供应商修改了未知的扩展内容,并提供了大部分VxWorks内容的抽象层)。我们有两个任务按不同的优先级运行,大约每100ms执行一次。具有较高优先级只计算增加的任务计数的整数(只所以做任何事情),而与低优先级的任务创建一个字符串,像这样:如何诊断奇怪的种族条件错误?
std::string text("Some text");
注意,之间不存在共享状态这些任务。它们都只在自动局部变量上运行。
在每次运行中,每个任务都会这样做100次,以便发生竞态条件的概率更高。该应用程序运行良好几分钟,然后CPU负载从5%到100%的镜头并保持在那里。整个时间似乎被创建字符串的任务使用。到目前为止,我们无法使用std::string
来重现行为。
我们使用GCC 4.1.2并在VxWorks 5.5上运行。该程序在奔腾III上运行。
我试着分析那里发生了什么,但我不能用调试器输入任何string
-方法,并且将打印语句添加到基本字符串似乎不起作用(这是this question of mine的背景)。我的怀疑是那里有东西腐蚀了导致电源回路的堆叠。我的问题是,在旧的VxWorks版本中是否有任何可以解释的错误?如果没有,你有任何进一步的建议如何诊断?我可以进行反汇编和堆栈转储,但我也没有经验解释。任何人都可以provide some pointers?
用'-fno-exceptions'编译没有帮助。我也无法通过手动创建'try/catch'环境并使用'new'和'delete'分配/释放内存来重现错误。 – 2012-02-14 10:09:06