2013-03-24 106 views
6

私の質問は具体的ですが、それでもC++デバッグの問題になる可能性はあります。実行時にカウンタの終了コード139が表示されますが、gdbはそれを確認します

私は無線ネットワークをシミュレートするためにomnet ++を使用しています。 omn​​et ++自体はC++プログラムです。

私のプログラム(Ubuntu 12.04でomnet ++ 4.2.2で修正されたinetフレームワーク)を実行すると、私は奇妙な現象に遭遇しました。終了コード139のプログラム終了(人々はこれがメモリ断片化を意味します)私がデバッグしようとすると、gdbは、問題のあるコードでは何も報告しません。実際には、シミュレーションが終了します。実際には、デバッグはコードのこの部分を通り、期待される結果を出力します。

gdbのバージョン情報:実行が失敗しても、デバッグがない理由GNU gdbの(Ubuntuの/リナロ7.4-2012.04-0ubuntu2.1)7.4から2012.04

は誰も教えてもらえますか?

多くの感謝!

+2

未定義の動作のようです。私たちは問題のあるコードを見ずには手助けできません。 –

答えて

17

終了コード139(人々は、これはメモリの断片化を意味言う)

いいえ、それはあなたのプログラムもsegmentation faultとして知られている信号11(Linuxや他のほとんどのUNIX上SIGSEGV)、で死亡したことを意味しています。

実行が失敗するのはなぜだと誰に教えてもらえますか?デバッグはできません。

あなたのプログラムは、未定義の動作を示し、(それは正しく、時には仕事に登場含み)を行うことができます。

最初のステップは、このプログラムをValgrindで実行し、報告されたすべてのエラーを修正する必要があります。

上記を実行してもプログラムがクラッシュした場合は、core(ulimit -c unlimited; ./a.out)をダンプしてGDBでそのコアダンプを解析する必要があります。gdb ./a.out core;コマンドを使用します。

+0

あなたのクイック返信をありがとう、私はコマンドプロンプトでプログラムを実行する方法を探しています、私は今シミュレータで立ち往生しています。私はvalgrindで分析した後に報告します。 – ulyssis2

+0

今、私はコマンドプロンプトでプログラムを実行してデバッグすることができます。 "問題のあるコード"に対してストライドを実行し、デバッグモードでコマンドプロンプトを使用して同じ場所で停止すると、プログラムをステップバイステップで実行すると、問題のあるコードも実行されますが、実行すると、問題のあるコードのどこかでプログラムが崩壊します。 GUI自体もプログラムであり、通常の実行モードではうまく動作しないため、これはIDEによるものだと思います。なぜ私は考えていない。 – ulyssis2

+0

@ ulyssis2 Valgrindは何を言いますか?プログラムはIDEの外で動作するように見えるかもしれませんが、Valgrindはあなたのバグについてまだ教えています。 –

関連する問題