gpt4 book ai didi

c++ - 如何正确调试并查找崩溃原因?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:25 24 4
gpt4 key购买 nike

我不知道该怎么办了……没希望了。我厌倦了猜测是什么导致了崩溃。最近我注意到一些 opengl 调用在一些 gfx 卡上随机崩溃程序。所以我现在真的很偏执什么会导致崩溃。这个崩溃的坏处是它只有在长时间使用该程序后才会崩溃,所以我只能猜测是什么问题。

我不记得我对程序进行了哪些更改可能会导致崩溃,已经很久了。但幸运的是,以前的版本没有崩溃,所以我可以复制粘贴一些代码并浪费 10 个小时来查看它从什么时候开始崩溃......我想我还不想那样做。

程序在我让它连续处理相同的文件大约 5 次后崩溃,每次它在进程中使用大约 200 兆字节的内存。它在读取过程中和之后随机崩溃。

我创建了一个“安全”的 free() 函数,它检查指针是否为 NULL,然后释放内存,然后将指针设置为 NULL。这不应该是这样吗?

我观察了任务管理器的内存使用情况,就在它崩溃之前,它开始占用比平时多 2 倍的内存。此外,每次我加载文件时,程序加载速度都会呈指数级下降;最初的几个负载彼此之间似乎并没有慢多少,但随后它开始迅速加倍加载速度。这应该告诉我有关崩溃的什么信息?

此外,我是否必须使用 clear() 手动释放 C++ vector ?还是它们在使用后自动释放,例如,如果我在函数内部分配 vector ,它会在每次函数结束时释放吗?我没有在 vector 中存储指针。

--

简而言之:我想尽快学会捕捉该死的错误,我该怎么做?使用 Visual Studio 2008。

最佳答案

复杂操作后某个时间发生的“随机”崩溃几乎可以肯定是堆损坏的结果。堆损坏错误是一个婊子,因为它们通常会在距离实际导致错误的地方很远的地方出现。由于您使用的是 Windows,我的建议是使用 Application Verifier ,可以从 MS 免费下载。

启动 AV,将其配置为观看您的节目,然后打开所有与内存相关的选项。然后在调试器下运行你的程序。 (这两件事会使你的程序运行极度慢。)AV 所做的额外检查有望导致你的程序在与你目前所见不同的地方崩溃,但它会错误真正原因的位置。

关于c++ - 如何正确调试并查找崩溃原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com