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