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

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

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

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

)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐