3

我创建了一个 lex 文件 test.l 并从中创建了 lex.yy.c,然后我使用 gcc -g 标志对其进行编译

我正在链接它,编译其余的代码调用 yylex() 没有问题,但是,在 GDB 中,我似乎无法深入调用 yylex()。

我究竟做错了什么?我在 yylex() 方法本身中设置了断点,这导致 gdb 在我对 yylex() 的调用中停止,但从不在函数内部。

我需要用调试符号或其他东西编译 -l 库吗?

我知道它正在运行,因为我使用 -d 创建了我的 lex.yy.c 文件,所以我看到了接受令牌等的输出。

谢谢

4

1 回答 1

5

我认为您违反了 lex 或至少 flex 使用该#line指令将用于错误和符号调试.l的文件设置为创建文件的文件这一事实.c。您需要在.l文件中设置断点或使用-L选项来指示 flex 不要使用该#line指令。

#lineGDB 需要设置断点时出现在指令中的文件名。如果您手动将.l文件转换为文件,.c那么这可能是您在命令行上使用的。如果转换是由 make 隐式完成的,那么它只是.l文件的基本名称(没有文件夹)。

于 2012-11-29T00:12:11.510 回答