1

我有一个客户报告我们的产品中使用混合代码的假定资源泄漏。所以我想调试它,看看到底发生了什么。我一直在经历一些奇怪的事情,比如 Visual Studio 崩溃、在单步执行代码期间冻结,以及调试器只是在退出代码错误的随机点处停止。

我将其缩小到导致它的非托管函数,它是一个从另一个线程而不是主线程开始的函数。我一直认为我有导致它的确切代码行,但问题的位置似乎在不断变化。所以我找到了问题的大致位置并开始逐行逐行查看汇编代码。

我什至将断点移动到函数第一次开始的位置,当调试器到达该点时,如果我跳过它,它将退出。如果我将断点 20 行设置到函数中,则执行会到达该点,然后我跳过它并且调试器退出,所以我不相信它真的与我的函数在 { }。

当我使用 F10 执行此操作时,调试器停止并且退出代码为 STATUS_WX86_BREAKPOINT,当我使用 F11 执行此操作时,它以退出代码 STATUS_WX86_SINGLE_STEP 停止。根据步进的类型,错误代码的名称对我来说很有意义,但并不能真正告诉我出了什么问题。当我再次运行它时,我尝试在反汇编中通过断点移动,以为我会看到之前发生的事情,退出只是发生得更早,所以这很烦人。我以前从未遇到过这样的事情,也找不到太多关于这个错误真正意味着我做错了什么?

有时,Visual Studio 并没有以错误的代码退出,而是简单地锁定了我。

4

1 回答 1

0

我倾向于同意@paddy 的评论,看起来问题来自不同的线程。您是否将 VS 设置为在第一次出现异常时停止?
在您的情况下,因为它是非托管代码,我会将调试器设置为在 win32 异常和 C++ 异常(全部)处停止。
如果您不知道可以从调试菜单 -> 例外...

于 2012-10-24T20:34:59.273 回答