我使用flex和bison写了一个简单的汇编程序。它做得很好,直到我做了一个小改动。在lex和yacc规范中是一个无害的附加规则。之后,每次运行它时都会抛出一个分段错误。我试图追踪这个seg错误的来源,但事实证明它发生在执行lex文件中的main之前。然后我删除了我做的添加并重新编译它,它仍然显示相同的错误。
怎么了?
我做了类似的事
先谢谢
答案 0 :(得分:3)
$ cc -g whatever...
$ gdb a.out
(gdb) run
<boom>
(gdb)bt
如果答案不明显,请选择上面的整个序列并更新上面的问题。
顺便说一句,我的猜测是你已经改变了你构建它的方式。也许您应该只是将程序切换回hello,world,然后开始逐个添加其他组件。答案 1 :(得分:1)
请提供更多信息,例如GDB回溯以及相应的弹性和野牛规则的代码。
我的一个调试技巧是将printf()
语句放在flex规则中。例如,假设您希望新规则与THISLOOP: LWU R2, 0(R3)
匹配。然后在flex中,将printf()放在与该bison规则匹配的任何规则中。但同样,没有任何代码,就无法进行调试。