【发布时间】:2012-10-25 04:34:59
【问题描述】:
我有一位客户报告我们的产品中使用混合代码的假定资源泄漏。所以我想调试它,看看到底发生了什么。我一直在经历一些奇怪的事情,比如 Visual Studio 崩溃、在单步执行代码期间冻结,以及调试器只是在退出代码错误的随机点处停止。
我将它缩小到导致它的非托管函数,它是从另一个线程而不是主线程启动的函数。我一直认为我有导致它的确切代码行,但问题的位置似乎在不断变化。所以我找到了问题的大致位置并开始逐行逐行查看汇编代码。
我什至将断点移动到函数第一次开始的位置,当调试器到达该点时,如果我跳过它,它将退出。如果我在函数中设置断点 20 行,则执行会到达该点,然后我跳过它并且调试器退出,所以我不相信它真的与我的函数在 { }。
当我使用 F10 执行此操作时,调试器停止并且退出代码为 STATUS_WX86_BREAKPOINT,当我使用 F11 执行此操作时,它以退出代码 STATUS_WX86_SINGLE_STEP 停止。根据步进的类型,错误代码的名称对我来说很有意义,但并不能真正告诉我出了什么问题。当我再次运行它时,我尝试在反汇编中通过断点移动,以为我会看到之前发生的事情,退出只是发生得更早,所以这很烦人。我以前从未遇到过这样的事情,也找不到太多关于这个错误真正意味着我做错了什么?
有时,Visual Studio 不会以错误的代码退出,而是直接锁定我。
【问题讨论】:
-
错误很可能发生在不同的线程中并导致您的程序中止。当您开始单步执行一个特定线程时,调度程序可以切换并在另一个线程中运行一堆代码,而无需向您显示。
标签: c++ visual-studio-2010 debugging disassembly