调试器不会显示指针变量

debugger wont show the pointed variable

我正在调试代码,有 2 个问题。

  1. 调试器向我展示了每个指针的内部字段,但突然间它就不会了,我不知道发生了什么变化或我点击了什么,但是当我尝试访问内部字段时(比如在指向的变量中写入一些东西) ) 它确实向我显示了正确的变量,所以它被保存在那里。

正如你所看到的最后清楚地指向了一些东西,但它没有显示指针指向的内部变量。 不过 10 分钟前它显示了它们。

  1. 出于某种原因,我的程序 运行 处于调试模式,但当我 运行 它经常遇到某种未知的无限循环时。怎么样?

我在 IDE CLion 上使用 mingw 调试器(我认为它叫做 GDB)。

我对问题的第一部分一无所知,但对于第二部分:

for some reason my program runs on debugging mode but encounter some sort of an unkown infinite loop when i run it regularly. Howcome?

非常常见。

在 99.999% 的情况下,发生这种情况是因为您的程序执行了某种未定义的行为,例如使用未初始化的数据、越界访问数组、在释放后访问内存等。

在剩下的 0.001% 的情况下,这是由于编译器错误造成的。

在非 Widows 操作系统上,有一些工具可以帮助快速找到此类问题,例如 Address and Memory Sanitizers。 Address Sanitizer 似乎也在 Windows 上 available,但仅在 MSVC 下。

更新:

what can i usually do in order to find those memory bugs that the debugger wont pickup on?

常用的技巧有:

  • 不保留任何未初始化的变量。
  • 添加assert()离子以验证索引是否在边界内等
  • 对于动态分配的内存属于哪个对象有一个非常清晰的模型,所以很清楚在删除后没有内存被访问等等

if my code is lets say 1500 lines long,

这是一个非常小的程序。学习 how to debug 这样的程序对你很有帮助。