近几天大学研讨课开发一款简单编译器,调试C++时遇到的问题。

一般来说C++很容易报segmentation fault,但是一般会在某个地方停下,并且往往是因为空指针调用。这次debug的时候却总是突然遇到报seg fault但是却不停下,直接跳到另一端奇怪代码(甚至是自己写的),导致一直难以定位错误。并且往往是第一次debug时没有问题,后面再调试时就会出问题。换用clion调试也是如此。

最后发现原因其实很简单,因为gdb的监视窗口中的变量会提前算出,所以当出现段错误(其实还是空指针)时,变量会出现无法成功计算的情况,从而导致gdb不能正常跟踪。

解决方法很简单,取消相关变量的监视,自然就可以正确运行到下一条语句处(很久之前的bug今天想起来写一下博客,当时没有记录截图,请原谅我qaq)

)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐