2011-06-18 1 views
0

EclipseでC++アプリケーションを開発しました。 Eclipseの外部で実行されると、一貫した数(4)のユーザーアクションの後にセグメンテーションフォールトが発生します。最初は特別なもののようには見えなかった。私は、Eclipseを使ってアプリケーションをデバッグし、バグを見つけようと考えていました。しかし、Eclipseからアプリケーションを実行すると、うまく動作します。誰にもこの問題のトラブルシューティング方法に関する推奨事項がありますか?C++のセグメンテーションフォールトはEclipseの外部のみ

ありがとうございました。

コードベースは、ここで表示するには大きすぎるが、私はセグメンテーションフォールトを引き起こしたコードの行を絞り込むました:

SDL_Surface* textSurface = TTF_RenderText_Solid(font, text.c_str(), color); 

このことについて奇妙な部分は、それはのコード何百ものこのラインを呼び出すです何度も同じ電話をかけて失敗します。 fontとcolorの値は、他の場所で定義され、毎回渡される定数です。だから毎回まったく同じです。テキストの値は " - "です。

+2

あるコードを投稿してください – Mahesh

+1

Eclipse外で起動し、デバッガを起動後に試してみましたか?それは何でも構いません:環境変数、継承されたファイル記述子、[setrlimit(2) '](http://linux.die.net/man/2/setrlimit)などで設定されている関数のいずれか –

+0

問題の原因となっているコード行を追加しました。私は起動後のデバッガをつけるつもりですか? – Marshmellow1328

答えて

0

(元の質問にコメントを参照してください、私はValgrindので識別されるメモリ管理の問題をクリーンアップした後、私の問題がなくなっています。Valgrindはを通じて私のアプリを実行しました。ありがとうございました!

1

最初に、コマンドラインでのリリース対デバッグと同じバージョンをEclipseで実行してください。

いくつかのバグは、コンパイラの設定が異なるか、デバッグされているだけで変更されます。これらは、しばしば初期化されていないデータによって引き起こされます。 valgrindのようなメモリデバッガツールは、初期化されていないデータの内容をランダム化できるので、この種の問題を見つけるのに役立ちます。

また、すべての警告がコンパイル設定でオンになっていることを確認してください。コンパイラは潜在的な間違ったものについて警告します。

編集: はい - ウォールと-pedanticはすべての警告を受け取っても問題ありません。

エラーが見つからない場合、エラーは実際にセグメンテーションが発生する場所ではありません。 segfaultは、目立たなくなった初期のエラーのためにのみ発生します。 valgrindのようなメモリデバッガを使うのがベストです。それ以外の場合は、多くのコードを精査する必要があります。ノードの勧告で

+0

私はgccコンパイラを使用しています。コンパイラオプションにはすでに-Wallと-pedanticが追加されていました。私は警告を受けていません。私はコンパイラの警告フラグに精通していないので、追加する必要があるものがあるかどうかを私に知らせてください。 – Marshmellow1328

関連する問題