应用程序抛出异常而不附加调试器

时间:2012-01-09 02:52:18

标签: c++ windows qt qt-creator

我在这里遇到了一个奇怪的问题,说实话,我不知道是什么导致了它。无论出于何种原因,当我从Qt Creator调试我的应用程序时,我的应用程序运行正常,没有任何异常,但当我只运行应用程序时,我得到一个写访问冲突异常(如下所示)

  

(1f68.1ea8):访问冲突 - 代码c0000005(第一次机会)

     

0x77da2073处的异常,代码:0xc0000005:写入访问冲突位于:0x1,ntdll中的标志= 0x0!RtlpLowFragHeapFree

     

在任何异常处理之前报告第一次机会异常。

     

可以预期并处理此异常。

     

eax = 00720065 ebx = 82130074 ecx = 006f007f edx = 0000006f esi = 01fa5fb6 edi = 82130000 eip = 77da2073 esp = 0012cc70 ebp = 0012cca4 iopl = 0 nv up ei pl nz na po nc cs = 001b ss = 0023 ds = 0023 es = 0023 fs = 003b gs = 0000 efl = 00010202

     !

NTDLL RtlpLowFragHeapFree + 0xc5:            77da2073 8930 mov dword ptr [eax],esi ds:0023:00720065 = ????????

     

0x77da2073处的异常,代码:0xc0000005:写入访问冲突:   0x1,flags = 0x0

     

注意:内部自发停止

     

州从InferiorRunOk(11)变为InferiorStopOk(14)。

     

     

当我注释掉它的行时(在运行之后,然后手动附加调试器)它似乎把我带到了同一问题的不同行。我正在使用的工具链是MSVCC,附加标志:

  

QMAKE_CFLAGS_RELEASE + = -Zi

     

QMAKE_CXXFLAGS_RELEASE + = -Zi -g

     

QMAKE_LFLAGS_RELEASE + = / DEBUG / OPT:REF

要重新计算,这是我尝试的内容:

  • 使用调试配置进行调试 - 确定
  • 使用调试配置运行 - 确定
  • 使用发布配置进行调试 - 确定
  • 使用发布配置运行 - 例外

1 个答案:

答案 0 :(得分:1)

你是否双重释放某些东西?快速搜索会显示this article about double freeing

我不确定MSVCC的等价物是什么(文章提到了一个名为gflags.exe的工具),但在Linux下使用GCC你可以使用一个名为Valgrind的程序和memcheck工具来找到这类问题