gpt4 book ai didi

c++ - Visual Studio - 查找用户代码中发生未处理异常的位置

转载 作者:行者123 更新时间:2023-11-30 00:53:11 24 4
gpt4 key购买 nike

在一个多线程项目中,我遇到了一些未处理的异常:

0xC0000005: access violation at 0x00000000

箭头指向qstring.h 的某行。我不知道我的代码的哪一行导致了这种违规行为。

如何在我的代码中找到访问冲突的位置?

enter image description here

这是调用堆栈吗?我真的无法理解这一点。

最佳答案

转到调试菜单,异常。

在此对话框中,勾选您要捕获的异常(编辑:Access Violation 将在 Win32 部分。您可以浏览异常的树结构或只需单击 Find 按名称搜索)

现在在调试器下运行你的代码,只要抛出异常,vs 就会中断。

现在打开调用堆栈(调试 > 窗口 > 调用堆栈)以查看导致问题的函数。您可以双击调用堆栈中的任何行以跳转到代码并在调试器中查看该方法的变量值。向后搜索堆栈,直到找到程序正在执行的您的代码中的最后一个方法。

在许多情况下,此时问题将非常明显(例如,变量为 null),但可能是在其他地方设置的状态正在通过该方法导致崩溃(例如,a 中的 null struct that you are passing through to library calls),在这种情况下,您将不得不寻找更远的地方以找出设置空值的时间和位置。这可能在调用堆栈的更上层,或者它可能是很久以前用完全不同的方法设置的状态 - 但是在崩溃之前立即找到代码正在做什么会给你很多关于在哪里看的线索找到问题的根源。

如果您可以识别导致访问冲突的数据值,那么您可以添加一个条件断点(例如,在该内存位置发生变化时),以便您可以捕获值设置不正确的点。另一种方法是使用访问器方法来设置值,这样您就可以为它们设置断点并单步执行代码,直到找到将错误值设置到其中的调用。或者您可能只需要在桌面上检查代码是否存在逻辑缺陷。

关于c++ - Visual Studio - 查找用户代码中发生未处理异常的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17123697/

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