0

Green Hills INTEGRITY 5.0.10 の下で Marvell Monahans PXA320 を実行しています。開発には MULTI 4.2.3 を使用しています。デバッグに RTSERV 接続を使用しています。メニュー駆動型プログラムを引き継ぐように依頼されました。

プログラムを停止して (ブレークポイントを変更するために) 再開すると、タスクが無限ループに入り、デバッガーの [I/O] タブにメニューが表示されることに気付きました。メニューの各インスタンスが印刷されるたびに、不正な選択をしたと表示されます。そのため、何らかの入力が、私が入力したかのようにタスクに入力されているようです (この入力は、明らかに無効なメニュー選択に対応しています)。このファントム入力が何であるかがディスプレイに表示されません。

停止/再開によって I/O が台無しになるのを防ぐためにできることはありますか?

ありがとう、デイブ

4

1 に答える 1

0

私の最初の推測は、getc() (または同等のもの) が -1 を返しているということです。これは、アプリケーションを停止した結果、入力バッファがオーバーフローした場合に発生する可能性があります。アプリケーションが停止している間、I/O は流れ続けます...

通常、INTEGRITY でデバッグするときにプログラムを停止することはお勧めできません。通常、デバッガーを単一のスレッド (アイドル状態または使用頻度の低いスレッド) にアタッチし、そのスレッドに「任意のタスク」ブレークポイントを設定してから、スレッドを再開することをお勧めします。(ウィンドウを閉じないでください! 閉じるとブレークポイントが削除されます。) ブレークポイントにヒットしたスレッドに「DebugBrk」ステータスが表示されます。その後、ダブルクリックしてその特定のスレッドにアタッチできます。

その代替手順に従うことで、(うまくいけば!) I/O エラーを防ぐことができます。

于 2013-06-24T19:56:01.817 に答える