私たちが追跡しているバグは、特定のVxWorksベースの組み込み環境内で発生します(ベンダーは不明な拡張機能に変更し、VxWorksの多くの抽象レイヤーを提供します)。私たちは、約100msごとに実行する、異なる優先度で実行する2つのタスクを持っています。間の共有状態が存在しないことを奇妙な競合状態のバグを診断するにはどうすればいいですか?
std::string text("Some text");
注:優先順位の低いこのように、文字列を作成して高い優先度は、単にタスクながら、(それは何もしないだけに)整数をカウントアップ追加カウントとタスクこれらの仕事はまったくありません。これらはどちらも自動ローカル変数でのみ動作します。
各実行では、各タスクで100回実行されるため、競合状態が発生する確率は高くなります。アプリケーションは2〜3分間正常に実行され、その後、CPU負荷が5%から100%になり、そこにとどまります。文字列を作成したタスクでは、全体の時間が使用されているように見えます。これまでのところ、std::string
を使用せずに動作を再現することはできませんでした。
私たちはGCC 4.1.2を使用し、VxWorks 5.5で動作しています。プログラムはPentium IIIで実行されます。
私はデバッガでstring
のメソッドを入力することはできませんし、print-statementsを基本文字列に追加することはできません(これはthis question of mineの背景です)。私の疑惑はそこにあるものがスタックを破壊して電源ループを引き起こすということです。私の質問は、これを説明することができる古いVxWorksのバージョンには何らかのエラーがあるのでしょうか?そうでない場合、これを診断する方法をさらに提案していますか?私は逆アセンブリとスタックダンプを得ることができますが、私はどちらかの解釈に経験がありません。誰でもprovide some pointersできますか?
'-fno-exceptions'を使ってコンパイルするのは役に立ちませんでした。私は手動で 'try/catch'環境を作り、' new'と 'delete'を使ってメモリを割り当て/解放することでバグを再現することもできませんでした。 –