我已经使用 Lemon Parser 生成了一个解析器代码。我无法调试生成的代码。控件显示当前执行语句之外的一些其他源代码。断点被置换。我试过 gdb 和 Visual C++。两者都有同样的问题。请告诉我调试它的方法。
问问题
324 次
3 回答
1
以下是经过认证的 WAG(Wild Ass Guess):
我建议查看解析器生成器使用的所有宏,看看其中是否有任何转义的换行符。如果有,请尝试删除所有这些(通过将这些行连接在一起),然后重新编译文件。然后查看调试器中的代码——事情可能突然又回到了应有的位置。
背景故事:早在 80 年代,我就开发并销售了一个名为 CDB 的调试器。当我将它移植到任何名称中包含 U*NX 的东西时,我对各种编译器的特性以及它们在某些情况下如何发出调试信息非常熟悉。
一个普遍存在的问题与逃脱换行符的宏有关。例如
#define foo(bar) bar + \
snort + something_else
x = foo(5);
y = 2;
如果 for 的行号y = 2;
应该是 5,那么许多符号表最终会将其显示为 6,并且它之后的每一行都将由一个偏移。并且每次使用这样的宏都会使行号越来越远。
于 2011-07-01T19:35:57.780 回答
0
如果您将它们构建为 lib/dll,请检查优化、调试信息选项。
于 2011-06-30T13:02:14.810 回答