フラグ-g
を使用してgcc 4.4.1を使用してCプログラムをコンパイルしましたが、gdbバージョン7.で関数の1つをステップスルーしようとすると、私はメッセージを受け取ります:
"Single stepping until exit from function _DictionaryTree_getNodeList,
which has no line number information."
誰かがこれがなぜ起こっているのか教えてもらえますか?
推測だけですが、_DictionaryTree_getNodeListは、-gでコンパイルされていない別のファイルにありますか?
私も同じ問題を抱えていましたが、私の場合、コンパイラに-g
を追加するだけでは十分ではなかったため、Manavが提案する-ggdb
を使用しました。
私の場合、問題はgcc
とgdb
の間のバージョンスキューでした。
検索からここに着いた後、これらの答えが私の状況に合わない場合、(エイリアス/シンボリックリンク/ Makefile
/環境変数のために)誤って新しいGCC(4.8.x)と古いものを使用していたことがわかりましたGDB(7.2)。 GDBの新しいバージョン(7.8)にステップアップすると問題が修正されました。何らかの理由で、新しいGCCと古いGDBを使用しても機能しませんでした。
このエラーメッセージも表示されましたが、問題の原因は異なりました。まだ問題がある場合は、#include <stdio.h>
をファイル内で、適切な角かっこで囲んでstdio.h
(テキストメッセージは、stdio.h
)。
すでに-g2
でコンパイルしていたにも関わらず、私は同じ問題を抱えていました。これを-g3
に変更すると、うまくいきました。
-gオプションを使用して-gオプションを使用せずにファイルをコンパイルすると、同じ問題が発生しました。ファイルの1つについては、gdbは問題なく行番号を示しました(-gオプションなしでコンパイルされた場合でも)。そして、他のファイルについては、-gフラグを明示的に指定する必要がありました...
相互参照を使用してGDBで実行時にソースファイルをロードできるかどうかについてのアイデアは、適切なソリューションです...行をアドレスにマッピングすることにより:D。
LD_LIBRARY_PATHを指定せずに共有ライブラリをデバッグしていたため、デバッグのエンドステートで正しい場所にこの問題が発生しました。
使用できます
export LD_LIBRARY_PATH=<location of the debug build of the .so file>:$LD_LIBRARY_PATH
うまくいけば、これは誰かに役立つ