13

我正在尝试调试用 C 编写的 DLL 中的问题,该问题不断导致访问冲突。我使用的是 Visual C++ 2008,但代码是纯 C。

我习惯了 Delphi,如果在调试器下运行时发生异常,程序会立即中断到调试器,它会给你一个检查程序状态的机会。但是,在 Visual C++ 中,我得到的只是“输出”选项卡中的一条消息:

First-chance exception at blah blah blah: Access violation reading location 0x04410000. 没有休息,什么都没有。它只是去展开堆栈,直到它回到我的 Delphi EXE 中,它会识别出问题并在那里提醒我,但到那时我已经丢失了几层调用堆栈,我不知道发生了什么。

我尝试过其他调试技术,但无论它在做什么都发生在 C 宏内的嵌套循环深处,该宏被调用超过 500 次,这超出了我的技能(或我的耐心)来追踪。

我认为必须有某种方法来获得“第一次机会”异常,才能真正给我一个“机会”来处理它。可能有一些我不知道的“在第一次机会异常时立即中断”配置设置,但它似乎并不是那么容易被发现。

有谁知道它在哪里以及如何启用它?

4

2 回答 2

17

Debug菜单中,选择Exceptions并选中您希望调试器中断的异常框。“访问冲突”位于“Win32 异常”下。

于 2010-04-14T21:16:34.193 回答
1

您还可以使用“First-chance exception at...”行中指定的地址创建数据断点。

根据 James 的回答,您要查找的异常位于 Win32 异常部分的下方。您应该在那里看到访问冲突。

于 2010-04-14T21:19:31.907 回答