3

lex ファイル test.l を作成し、そこから lex.yy.c を作成しました。これを gcc -g フラグでコンパイルします。

私はそれをリンクしていますが、yylex() を呼び出す残りのコードをコンパイルするのに問題はありませんが、GDB では yylex() の呼び出しに飛び込むことができないようです。

私は何を間違っていますか?yylex() メソッド自体にブレークポイントを設定すると、yylex() の呼び出しで gdb が停止しますが、関数内では停止しません。

-l ライブラリをデバッグ シンボルなどでコンパイルする必要がありますか?

-d を使用して lex.yy.c ファイルを作成したため、実行中であることがわかります。したがって、トークンの受け入れなどの出力が表示されます。

ありがとう

4

1 に答える 1

5

lex、または少なくとも flex が#lineディレクティブを使用して、エラーに使用されるファイルとシンボリックデバッグを、.lファイルの.c作成元のファイルに設定するという事実に違反していると思います。.lファイルにブレークポイントを設定するか、オプションを使用して、ディレクティブ-Lを使用しないように flex に指示する必要があります。#line

GDB では、#lineブレークポイントを設定するときにディレクティブに表示されたファイル名が必要です。ファイルを手動で.lファイルに変換した場合.c、これはおそらくコマンド ラインで使用したものです。変換が make によって暗黙的に行われた場合、それは単なる.lファイルのベース名 (フォルダーなし) です。

于 2012-11-29T00:12:11.510 に答える