我创建了一个 lex 文件 test.l 并从中创建了 lex.yy.c,然后我用 gcc -g 标志编译
我正在链接它,并且在编译调用 yylex() 的其余代码时没有问题,但是,在 GDB 中,我似乎无法深入调用 yylex()。
我究竟做错了什么?我在 yylex() 方法本身中放置了断点,这导致 gdb 在我调用 yylex() 时停止,但从未在函数内部。
我是否需要使用调试符号或其他东西编译 -l 库?
我知道它正在运行,因为我用 -d 创建了我的 lex.yy.c 文件,所以我看到了接受令牌等的输出。
谢谢
我认为您对 lex 或至少 flex 使用该#line指令将用于错误和符号调试.l的.c文件设置为创建该文件的文件的事实感到犯规。您需要在.l文件中设置断点或使用-L选项来指示 flex 不使用该#line指令。
GDB 需要#line在设置断点时出现在指令中的文件名。如果您手动将.l文件转换为文件,.c那么这可能是您在命令行中使用的。如果转换是由 make 隐式完成的,那么它只是.l文件的基本名称(不包括文件夹)。