【发布时间】:2017-08-05 06:28:58
【问题描述】:
如何在 Linux 上调试 LEX/FLEX 程序?编译运行代码如下:
lex example.l
gcc lex.yy.c -lfl
./a.out
<Enter your input>
-d 令牌会调试 LEX/FLEX 吗?如果是,我需要将它包含在代码中的哪一行进行编译?
【问题讨论】:
标签: c linux windows flex-lexer lex
如何在 Linux 上调试 LEX/FLEX 程序?编译运行代码如下:
lex example.l
gcc lex.yy.c -lfl
./a.out
<Enter your input>
-d 令牌会调试 LEX/FLEX 吗?如果是,我需要将它包含在代码中的哪一行进行编译?
【问题讨论】:
标签: c linux windows flex-lexer lex
您在 flex 命令行上使用 -d(如 lex -d example.l -- 假设您的 lex 实际上是 flex,它在 linux 上)。这会默认启用调试模式,这将在识别出每个令牌时打印出有关它的信息。
您可以通过更改全局变量yy_flex_debug 在词法分析器中动态打开和关闭调试模式——将其设置为零会关闭调试打印,将其设置为非零则重新打开。
即使您不使用-d,也可以通过使用-DFLEX_DEBUG 编译生成的C 代码来包含调试代码,尽管在这种情况下yy_flex_debug 将默认为0,因此您需要在某处(在您的主函数中?或其他地方)将其设置为非零以启用调试 - 为您的程序设置一个命令行选项是一个好方法。
【讨论】:
flex 还发出#line 指令以允许对操作代码进行正常的源代码级调试,其中gcc 的'-g' 选项会有帮助的。大概 OP 已经知道这一点,但问题有点不清楚 debugging 在这种情况下意味着什么。
-d,生成的扫描器将不包含测试yy_flex_debug 的代码,因此将其设置为1 不会做任何事情。因此,您必须使用-d。