UnHandle exception in *.exe 0xc0000005 :Access violation
004CDBE6 83 66 0C 00 and dword ptr [esi+0Ch],0
004CDBEA 89 46 04 mov dword ptr [esi+4],eax
004CDBED 8B 44 24 0C mov eax,dword ptr [esp+0Ch]
004CDBF1 C7 06 88 E7 55 00 mov dword ptr [esi],offset _com_error::`vftable' (0055e788)
004CDBF7 85 C0 test eax,eax
...单击[确定]后就进入汇编代码,可问题是我不懂汇编啊,也不知如何跟踪到我的错误源码。因为我的工程中使用到多线程,出现这种情况以后如何调试,也就是我如何知道是哪段代码出错了?
并且这个问题不是很容易测试的出来,有时侯很久都不会出现,有时侯一运行就出现。现在我看到这个信息框心里就发毛,怕的很,我相信各位高手一定也遇到过,如何解决,多谢!
004CDBE6 83 66 0C 00 and dword ptr [esi+0Ch],0
004CDBEA 89 46 04 mov dword ptr [esi+4],eax
004CDBED 8B 44 24 0C mov eax,dword ptr [esp+0Ch]
004CDBF1 C7 06 88 E7 55 00 mov dword ptr [esi],offset _com_error::`vftable' (0055e788)
004CDBF7 85 C0 test eax,eax
...单击[确定]后就进入汇编代码,可问题是我不懂汇编啊,也不知如何跟踪到我的错误源码。因为我的工程中使用到多线程,出现这种情况以后如何调试,也就是我如何知道是哪段代码出错了?
并且这个问题不是很容易测试的出来,有时侯很久都不会出现,有时侯一运行就出现。现在我看到这个信息框心里就发毛,怕的很,我相信各位高手一定也遇到过,如何解决,多谢!
7C812AA4 50 push eax
7C812AA5 FF 15 10 15 80 7C call dword ptr ds:[7C801510h]
->7C812AAB 5E pop esi //代码停止在这里
7C812AAC C9 leave
7C812AAD C2 10 00 ret 10h
7C812AB0 85 FF test edi,edi代码停止在上面那行,如何查啊?
不过我根据mayudong1提供的信息"看函数调用栈,是在那个函数中出的错"
打开了Call stack的窗体,在这个窗体中显示了一大堆,如下:KERNEL32! 7c812aab()
MSVCRTD! _CxxThrowException@8 + 57 bytes
_com_raise_error(long -2147467261, IErrorInfo * 0x00000000) + 35 bytes
_com_issue_error(long -2147467261) + 11 bytes
_com_ptr_t<_com_IIID<_Connection,&_GUID_00000550_0000_0010_8000_00aa006d2ea4> >::operator->() line 348
CThreadDispense::RunThread() line 100 + 10 bytes
_AfxThreadEntry(void * 0x0012d80c) line 125 + 11 bytes
_threadstartex(void * 0x028b4938) line 227 + 13 bytes
KERNEL32! 7c80b6d9()点击CThreadDispense::RunThread() line 100 + 10 bytes后进入线程函数RunThread()
我想应该是这里出错了吧,结果一查果然是这里,是一个ADO读数据库的问题,当线程结束后我会Close ADO,
然后主线程又会生成一个新的线程,然后新的线程又会重复读这个数据库,但是因为关闭数据和打开数据库的时间太短,所有时侯会出现旧线程的数据库没有关闭完成,新的线程又来读这个数据库,所以出错了。谢谢各位,我以前都不知怎样用Call stack窗体,现在新学到一招了,对VC的调试没那么茫然了,呵呵!
另外"需要生成pdb符号文件,然后用windbg调试"我还不知如何使用,有空研究一下.
class A
{};
class B : public A
{};class C : public B, virtual public A
{}导致在类C里面访问A的vtable失效。解决办法是去掉virtual继承。