【问题标题】:Debugger ignores errors in dynamically loaded DLLs调试器忽略动态加载的 DLL 中的错误
【发布时间】:2011-01-10 12:46:03
【问题描述】:

我有一个与调试自编码 DLL 有关的非常奇怪的问题。我有一个 MFC 驱动的基于对话框的应用程序、几个静态链接的项目和几个在运行时加载的 DLL 项目。

我在调试中构建解决方案,运行应用程序,我可以轻松地调试那些 DLL 项目。现在的问题。如果 DLL 中有一些明显的运行时错误,如下所示

int* i = 0;
*i = 4;

调试器断言没有错误,不抛出异常,并静默返回空闲状态,甚至没有(可见的)堆栈返回。看起来当我在语句*i = 4; 上按 F10 时,控件返回到主应用程序窗口,程序继续执行,因为什么也没发生!如果代码中没有错误,它执行得很好。但我希望在这种情况下会断言错误!它们位于主应用程序的代码中。

我使用 LoadLibrary() 函数将我的 DLL 加载到应用程序中。 DLL 本身具有静态链接的 MFC,与解决方案中的所有其他项目相同。

有什么想法吗?甚至不知道要谷歌什么问题......

【问题讨论】:

    标签: c++ dll visual-studio-2005 mfc debugging


    【解决方案1】:

    很可能您使用 LoadLibrary() 从不正确的位置加载 DLL,并且缺少 PDB 会阻止调试器设置断点。您也可以在禁用断言的情况下加载零售 DLL(如果“要断言的错误”表示您在代码中有断言)。如果错误是页面错误(如您在示例中显示的 AV)并且您的调试器没有中断,则表示异常已处理。您总是可以在第一次机会时打开休息时间,例如。 sxe av。不确定您是如何通过代码编辑工具执行此操作的,但您始终可以使用 real debugger

    【讨论】:

      【解决方案2】:

      在您的代码库中某处有一个异常处理程序正在吞噬异常。首先查找 SetUnhandledExceptionFilter。另外:Debug + Exceptions,Win32 Exceptions,勾选 Throw 复选框。

      【讨论】:

        【解决方案3】:

        哦,看来这个错误与 DLL 完全无关。调试器在主应用程序模块中的行为方式也相同。我已将此代码-sn-p 插入到 OnInitDialog() 函数和按钮单击 OnBnClickedButton1() 处理程序函数中。

        在第一种情况下(在 OnInitDialog() 内部),异常会照常抛出,程序无法从该错误中恢复。在输出窗口中跟踪以下消息:

        0x00a3a83e 处的第一次机会异常 在 dmc.exe 中:0xC0000005:访问 违规写入位置0x00000000。

        0x00a3a83e 处的第一次机会异常 在 dmc.exe 中:0xC0000005:访问 违规写入位置0x00000000。

        在 0x00a3a83e 处未处理的异常 dmc.exe: 0xC0000005: 访问冲突 写入位置 0x00000000。

        但在第二种情况下(在 OnBnClickedButton1() 内部)没有抛出异常,OnBnClickedButton1() 的执行被中止,程序继续正常运行。在输出窗口中跟踪以下消息:

        0x00a3c23f 处的第一次机会异常 在 dmc.exe 中:0xC0000005:访问 违规写入位置0x00000000。

        所以在应用程序初始化之后似乎出现了一些顶级异常处理程序。我创建了新的测试应用程序并用它尝试了同样的事情——在这两种情况下都会抛出异常。我比较了他们的项目设置(.vcproj 文件上的差异),并没有发现与此问题相关的差异。

        也许这种行为是由一些奇怪的 MFC 宏定义控制的?还是我无意中受到了其他一些设置的影响?

        对于第一版问题中的错误,请见谅。

        【讨论】:

          【解决方案4】:

          哦,原来是OpenGLwglMakeCurrent()调用导致的问题,只有在Windows 7 64位和NVIDIA GeForce 8800显卡下才能体验,而在Windows Vista 32位下一切正常。

          我问了新问题here。感谢您的反馈。

          【讨论】:

            猜你喜欢
            • 2017-12-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-04
            相关资源
            最近更新 更多