web-dev-qa-db-ja.com

Eclipse CDTがブレークポイントを無視するのはなぜですか?

私の問題は、コードにいくつかのブレークポイントを設定し、それらのいくつかが機能していないことです。いくつかの場所では、「未解決のブレークポイント」について不平を言っています。

なぜこれが起こっているのか誰かが何か手がかりを持っていますか?ちなみに、私はgdbを使用しています。

編集:はい、もちろんデバッグ情報でコンパイルされています。これは、コード内の一部のクラスまたはポイントでのみ発生します。そして、ステップで到達できるので、コードのその部分に到達すると確信しています。

編集:リチャードからの解決策は機能しません。とにかくありがとう。最適化せずにデバッグでコンパイルしています。

25
Pablo Herrero

まだロードされていない共有ライブラリにブレークポイントを設定しようとしている可能性があります。ライブラリがロードされるまで、これは機能しません。新しいgdbでは、遅延ブレークポイントを設定できますが、CDTでは(まだ)サポートされていない可能性があります。回避策は、問題の共有ライブラリがすでにロードされているときに到達する最初から利用可能な場所にブレークポイントを設定することです。次に、共有ライブラリに他のブレークポイントを設定します。これで動作するはずです。少し面倒ですが、通常は機能します。

GDBドキュメント から:

アドレスがまだ不明な保留中のブレークポイントの場合、このフィールドには「PENDING」が含まれます。このようなブレークポイントは、ブレークポイントによって参照されるシンボルまたは行を持つ共有ライブラリがロードされるまで起動しません。

15
lothar

参照されているプロセスランチャーを「GDB(DSF)プロセスランチャーの作成」から「標準のプロセスランチャーの作成」に切り替えると、この問題が修正されることがあります。また、すべてのブレークポイントを削除してEclipseを再起動するだけでうまくいく場合もあります。

10
Max

最適化により、ブレークポイントもスキップされる場合があります。 -O0でコンパイルしていることを確認してください

3
Nathan Fig

「未解決のブレークポイント」とは、ブレークポイントを設定しようとしたファイルと行に対応するコードの場所がGDBで見つからなかったことを意味します。

コンストラクターで停止しようとしていますか?

もしそうなら、あなたはおそらくこの中心的に修正されたGCC bug を見ているでしょう。

3

私は同じ問題を抱えていました、

1.- Removed the breakpoints. 
2.- Restart Eclipse 
3.- Clean the project by using project -> clean 
4.- Add again the breakpoints and start your debugging.

これで私の問題は解決しました。

0
Israelm

GDBでも同様の問題が発生しました。パスが異なっていても、ソースコードのファイル名が同じであることが原因のようです。重複の名前を変更しましたが、その後GDBは問題なく機能しました。

シルヴィウ

0
silviu

F8(再開)の使用がブレークポイントで止まらないことがわかりました。しかし、Stop On Startup:main setがあり、コード(F5/F6)をステップオーバーすると、ブレークポイントがヒットします。 -gまたは-g3以外の特別なコンパイラオプションはありません。お役に立てば幸いです...

0
alexr

ここで他の回答をしても問題が解決しない場合は、私と同じ問題が発生している可能性があります(これは、古いバージョンのGDBを使用した結果です)。これは、MacでGDBを使用している人に当てはまる可能性があります。

ここで私の質問と回答を参照してください:

複数のソースファイルを使用する場合、GDBはコードの一部の行で中断しません

0
Neal Kruis

テンプレートクラス/関数にブレークポイントを設定しますか?同じ問題が発生しました。テンプレートのコードをステップスルーできますが、ブレークポイントが機能しません。 Eclipseは、そのクラスのすべてのインスタンス化にブレークポイントを配置する必要があることを理解していないと思います。

template <typename T>
int doit(T a) {
 return a.do(); // <-- breakpoint here
}
...
A a;
cout << doit(a);

Doit(...)を待ち、doit(...)を待つことはないと思います。少なくとも、gdb自体を関数に設定すると、ブレークポイントで停止します: 'doit'。

0
Arks

GDBをデバッガーとして使用している場合は、-gと-ggdbの両方のフラグを使用していることを確認してください。

Makeファイルを直接編集することができます。FCFLAGS= -g -ggdb(他のいくつかのフラグがあります)

または、[デバッグ構成]に移動します(バグアイコンの横にある小さな矢印をクリックするとドロップダウンするメニューにあります)。デバッグするプロジェクトを選択し、[デバッガー]タブをクリックします。 gdbを使用していることを確認し、ここにフラグを追加します。

0
mm_

ブレークポイントの種類が正しいことを確認してください。 C/C++の場合、これは小さな青い点です。他のように見える場合は、ブレークポイントのタイプが正しくない可能性があります。私はファイルを閉じようとします、それを右クリックします->で開く-> C/C++エディタ。これは私のために働いた。

0
Zorayr