调试器不会显示指针变量
debugger wont show the pointed variable
我正在调试代码,有 2 个问题。
- 调试器向我展示了每个指针的内部字段,但突然间它就不会了,我不知道发生了什么变化或我点击了什么,但是当我尝试访问内部字段时(比如在指向的变量中写入一些东西) ) 它确实向我显示了正确的变量,所以它被保存在那里。
正如你所看到的最后清楚地指向了一些东西,但它没有显示指针指向的内部变量。
不过 10 分钟前它显示了它们。
- 出于某种原因,我的程序 运行 处于调试模式,但当我 运行 它经常遇到某种未知的无限循环时。怎么样?
我在 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 这样的程序对你很有帮助。
我正在调试代码,有 2 个问题。
- 调试器向我展示了每个指针的内部字段,但突然间它就不会了,我不知道发生了什么变化或我点击了什么,但是当我尝试访问内部字段时(比如在指向的变量中写入一些东西) ) 它确实向我显示了正确的变量,所以它被保存在那里。
正如你所看到的最后清楚地指向了一些东西,但它没有显示指针指向的内部变量。 不过 10 分钟前它显示了它们。
- 出于某种原因,我的程序 运行 处于调试模式,但当我 运行 它经常遇到某种未知的无限循环时。怎么样?
我在 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 这样的程序对你很有帮助。