From: thomasinov on 23 Jul 2007 20:39 I recently ported an app from VC2003 to VC2005. My app now crashes on exit. The following is the stack trace from the app. mfc80d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* pfnCreateObject=0x78245650) Line 409 + 0x3 bytes C++ mfc80d.dll!CThreadLocal<AFX_MODULE_THREAD_STATE>::GetData() Line 177 + 0xd bytes C++ mfc80d.dll!AfxGetModuleThreadState() Line 464 + 0x11 bytes C++ mfc80d.dll!AfxWinTerm() Line 47 + 0x5 bytes C++ mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x0015233a, int nCmdShow=1) Line 62 C++ SzSimTool.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x0015233a, int nCmdShow=1) Line 29 C++ SzSimTool.exe!__tmainCRTStartup() Line 578 + 0x35 bytes C SzSimTool.exe!WinMainCRTStartup() Line 403 C kernel32.dll!7c816fd7() [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] It appears that AfxGetModuleThreadState() returns a seemingly valid AFX_MODULE_THREAD_STATE* object. However, the memory under it is inaccessible. So, when it gets to the GetData() call inside of the CThreadLocalObject, the this pointer is pointing to memory it has no access to. Therefore, as soon as it attempts to execute if (m_nSlot == 0), it crashes with the following exception: Unhandled exception at 0x78246d10 (mfc80d.dll) in SzSimTool.exe: 0xC0000005: Access violation reading location 0x05878b48. Anyone have any ideas as to what is causing this? If not how can I go about debugging this problem. Thanks, V
From: Joseph M. Newcomer on 24 Jul 2007 08:39 Without seeing the code, and especially the code of CThreadLocalObject, it is hard to even begin to guess what might be going on there. joe On Tue, 24 Jul 2007 00:39:34 -0000, "thomasinov(a)gmail.com" <thomasinov(a)gmail.com> wrote: >I recently ported an app from VC2003 to VC2005. My app now crashes on >exit. The following is the stack trace from the app. > >mfc80d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* >pfnCreateObject=0x78245650) Line 409 + 0x3 bytes C++ > > mfc80d.dll!CThreadLocal<AFX_MODULE_THREAD_STATE>::GetData() Line 177 >+ 0xd bytes C++ > mfc80d.dll!AfxGetModuleThreadState() Line 464 + 0x11 bytes C++ > mfc80d.dll!AfxWinTerm() Line 47 + 0x5 bytes C++ > > mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ >* hPrevInstance=0x00000000, char * lpCmdLine=0x0015233a, int >nCmdShow=1) Line 62 C++ > > SzSimTool.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ >* hPrevInstance=0x00000000, char * lpCmdLine=0x0015233a, int >nCmdShow=1) Line 29 C++ > >SzSimTool.exe!__tmainCRTStartup() Line 578 + 0x35 bytes C > SzSimTool.exe!WinMainCRTStartup() Line 403 C > kernel32.dll!7c816fd7() > [Frames below may be incorrect and/or missing, no symbols loaded for >kernel32.dll] > > >It appears that AfxGetModuleThreadState() returns a seemingly valid >AFX_MODULE_THREAD_STATE* object. > > >However, the memory under it is inaccessible. So, when it gets to >the >GetData() call inside of the CThreadLocalObject, the this pointer is >pointing to memory it has no access to. Therefore, as soon as it >attempts >to execute if (m_nSlot == 0), it crashes with the following >exception: >Unhandled exception at 0x78246d10 (mfc80d.dll) in SzSimTool.exe: >0xC0000005: Access violation reading location 0x05878b48. > > >Anyone have any ideas as to what is causing this? If not how can I go >about debugging this problem. > >Thanks, >V Joseph M. Newcomer [MVP] email: newcomer(a)flounder.com Web: http://www.flounder.com MVP Tips: http://www.flounder.com/mvp_tips.htm
From: VT on 24 Jul 2007 19:00 CNoTrackObject* CThreadLocalObject::GetData( CNoTrackObject* (AFXAPI* pfnCreateObject)()) { ENSURE(pfnCreateObject); if (m_nSlot == 0) { if (_afxThreadData == NULL) { _afxThreadData = new(__afxThreadData) CThreadSlotData; ENSURE(_afxThreadData != NULL); } m_nSlot = _afxThreadData->AllocSlot(); ENSURE(m_nSlot != 0); } CNoTrackObject* pValue = static_cast<CNoTrackObject*>(_afxThreadData- >GetThreadValue(m_nSlot)); if (pValue == NULL) { // allocate zero-init object pValue = (*pfnCreateObject)(); // set tls data to newly created object _afxThreadData->SetValue(m_nSlot, pValue); ASSERT(_afxThreadData->GetThreadValue(m_nSlot) == pValue); } return pValue; } Here is the surrounding code. It breaks at the line if (m_nSlot == 0). On Jul 24, 8:39 am, Joseph M. Newcomer <newco...(a)flounder.com> wrote: > Without seeing the code, and especially the code of CThreadLocalObject, it is hard to even > begin to guess what might be going on there. > joe > > > > > > On Tue, 24 Jul 2007 00:39:34 -0000, "thomasi...(a)gmail.com" <thomasi...(a)gmail.com> wrote: > >I recently ported an app from VC2003 to VC2005. My app now crashes on > >exit. The following is the stack trace from the app. > > >mfc80d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* > >pfnCreateObject=0x78245650) Line 409 + 0x3 bytes C++ > > > mfc80d.dll!CThreadLocal<AFX_MODULE_THREAD_STATE>::GetData() Line 177 > >+ 0xd bytes C++ > > mfc80d.dll!AfxGetModuleThreadState() Line 464 + 0x11 bytes C++ > > mfc80d.dll!AfxWinTerm() Line 47 + 0x5 bytes C++ > > > mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ > >* hPrevInstance=0x00000000, char * lpCmdLine=0x0015233a, int > >nCmdShow=1) Line 62 C++ > > > SzSimTool.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ > >* hPrevInstance=0x00000000, char * lpCmdLine=0x0015233a, int > >nCmdShow=1) Line 29 C++ > > >SzSimTool.exe!__tmainCRTStartup() Line 578 + 0x35 bytes C > > SzSimTool.exe!WinMainCRTStartup() Line 403 C > > kernel32.dll!7c816fd7() > > [Frames below may be incorrect and/or missing, no symbols loaded for > >kernel32.dll] > > >It appears that AfxGetModuleThreadState() returns a seemingly valid > >AFX_MODULE_THREAD_STATE* object. > > >However, the memory under it is inaccessible. So, when it gets to > >the > >GetData() call inside of the CThreadLocalObject, the this pointer is > >pointing to memory it has no access to. Therefore, as soon as it > >attempts > >to execute if (m_nSlot == 0), it crashes with the following > >exception: > >Unhandled exception at 0x78246d10 (mfc80d.dll) in SzSimTool.exe: > >0xC0000005: Access violation reading location 0x05878b48. > > >Anyone have any ideas as to what is causing this? If not how can I go > >about debugging this problem. > > >Thanks, > >V > > Joseph M. Newcomer [MVP] > email: newco...(a)flounder.com > Web:http://www.flounder.com > MVP Tips:http://www.flounder.com/mvp_tips.htm- Hide quoted text - > > - Show quoted text -
From: Joseph M. Newcomer on 25 Jul 2007 13:39 The problem I had was that I could find no documentation on this class. However, the most likely cause is that some memory damage has occurred. When you get the crash, what is the value of 'this', for example? joe On Tue, 24 Jul 2007 23:00:02 -0000, VT <thomasinov(a)gmail.com> wrote: >CNoTrackObject* CThreadLocalObject::GetData( > CNoTrackObject* (AFXAPI* pfnCreateObject)()) >{ > ENSURE(pfnCreateObject); > > if (m_nSlot == 0) > { > if (_afxThreadData == NULL) > { > _afxThreadData = new(__afxThreadData) CThreadSlotData; > ENSURE(_afxThreadData != NULL); > } > m_nSlot = _afxThreadData->AllocSlot(); > ENSURE(m_nSlot != 0); > } > CNoTrackObject* pValue = static_cast<CNoTrackObject*>(_afxThreadData- >>GetThreadValue(m_nSlot)); > if (pValue == NULL) > { > // allocate zero-init object > pValue = (*pfnCreateObject)(); > > // set tls data to newly created object > _afxThreadData->SetValue(m_nSlot, pValue); > ASSERT(_afxThreadData->GetThreadValue(m_nSlot) == pValue); > } > return pValue; >} > >Here is the surrounding code. It breaks at the line if (m_nSlot == >0). > > >On Jul 24, 8:39 am, Joseph M. Newcomer <newco...(a)flounder.com> wrote: >> Without seeing the code, and especially the code of CThreadLocalObject, it is hard to even >> begin to guess what might be going on there. >> joe >> >> >> >> >> >> On Tue, 24 Jul 2007 00:39:34 -0000, "thomasi...(a)gmail.com" <thomasi...(a)gmail.com> wrote: >> >I recently ported an app from VC2003 to VC2005. My app now crashes on >> >exit. The following is the stack trace from the app. >> >> >mfc80d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* >> >pfnCreateObject=0x78245650) Line 409 + 0x3 bytes C++ >> >> > mfc80d.dll!CThreadLocal<AFX_MODULE_THREAD_STATE>::GetData() Line 177 >> >+ 0xd bytes C++ >> > mfc80d.dll!AfxGetModuleThreadState() Line 464 + 0x11 bytes C++ >> > mfc80d.dll!AfxWinTerm() Line 47 + 0x5 bytes C++ >> >> > mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ >> >* hPrevInstance=0x00000000, char * lpCmdLine=0x0015233a, int >> >nCmdShow=1) Line 62 C++ >> >> > SzSimTool.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ >> >* hPrevInstance=0x00000000, char * lpCmdLine=0x0015233a, int >> >nCmdShow=1) Line 29 C++ >> >> >SzSimTool.exe!__tmainCRTStartup() Line 578 + 0x35 bytes C >> > SzSimTool.exe!WinMainCRTStartup() Line 403 C >> > kernel32.dll!7c816fd7() >> > [Frames below may be incorrect and/or missing, no symbols loaded for >> >kernel32.dll] >> >> >It appears that AfxGetModuleThreadState() returns a seemingly valid >> >AFX_MODULE_THREAD_STATE* object. >> >> >However, the memory under it is inaccessible. So, when it gets to >> >the >> >GetData() call inside of the CThreadLocalObject, the this pointer is >> >pointing to memory it has no access to. Therefore, as soon as it >> >attempts >> >to execute if (m_nSlot == 0), it crashes with the following >> >exception: >> >Unhandled exception at 0x78246d10 (mfc80d.dll) in SzSimTool.exe: >> >0xC0000005: Access violation reading location 0x05878b48. >> >> >Anyone have any ideas as to what is causing this? If not how can I go >> >about debugging this problem. >> >> >Thanks, >> >V >> >> Joseph M. Newcomer [MVP] >> email: newco...(a)flounder.com >> Web:http://www.flounder.com >> MVP Tips:http://www.flounder.com/mvp_tips.htm- Hide quoted text - >> >> - Show quoted text - > Joseph M. Newcomer [MVP] email: newcomer(a)flounder.com Web: http://www.flounder.com MVP Tips: http://www.flounder.com/mvp_tips.htm
From: VT on 27 Jul 2007 14:45
This is valid but m_nSlot is undefined. I get a "m_nSlot CXX0030: Error: expression cannot be evaluated" message in the watch window. On Jul 25, 1:39 pm, Joseph M. Newcomer <newco...(a)flounder.com> wrote: > The problem I had was that I could find no documentation on this class. However, the most > likely cause is that some memory damage has occurred. When you get the crash, what is the > value of 'this', for example? > joe > > > > > > On Tue, 24 Jul 2007 23:00:02 -0000, VT <thomasi...(a)gmail.com> wrote: > >CNoTrackObject* CThreadLocalObject::GetData( > > CNoTrackObject* (AFXAPI* pfnCreateObject)()) > >{ > > ENSURE(pfnCreateObject); > > > if (m_nSlot == 0) > > { > > if (_afxThreadData == NULL) > > { > > _afxThreadData = new(__afxThreadData) CThreadSlotData; > > ENSURE(_afxThreadData != NULL); > > } > > m_nSlot = _afxThreadData->AllocSlot(); > > ENSURE(m_nSlot != 0); > > } > > CNoTrackObject* pValue = static_cast<CNoTrackObject*>(_afxThreadData- > >>GetThreadValue(m_nSlot)); > > if (pValue == NULL) > > { > > // allocate zero-init object > > pValue = (*pfnCreateObject)(); > > > // set tls data to newly created object > > _afxThreadData->SetValue(m_nSlot, pValue); > > ASSERT(_afxThreadData->GetThreadValue(m_nSlot) == pValue); > > } > > return pValue; > >} > > >Here is the surrounding code. It breaks at the line if (m_nSlot == > >0). > > >On Jul 24, 8:39 am, Joseph M. Newcomer <newco...(a)flounder.com> wrote: > >> Without seeing the code, and especially the code of CThreadLocalObject, it is hard to even > >> begin to guess what might be going on there. > >> joe > > >> On Tue, 24 Jul 2007 00:39:34 -0000, "thomasi...(a)gmail.com" <thomasi...(a)gmail.com> wrote: > >> >I recently ported an app from VC2003 to VC2005. My app now crashes on > >> >exit. The following is the stack trace from the app. > > >> >mfc80d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* > >> >pfnCreateObject=0x78245650) Line 409 + 0x3 bytes C++ > > >> > mfc80d.dll!CThreadLocal<AFX_MODULE_THREAD_STATE>::GetData() Line 177 > >> >+ 0xd bytes C++ > >> > mfc80d.dll!AfxGetModuleThreadState() Line 464 + 0x11 bytes C++ > >> > mfc80d.dll!AfxWinTerm() Line 47 + 0x5 bytes C++ > > >> > mfc80d.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ > >> >* hPrevInstance=0x00000000, char * lpCmdLine=0x0015233a, int > >> >nCmdShow=1) Line 62 C++ > > >> > SzSimTool.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ > >> >* hPrevInstance=0x00000000, char * lpCmdLine=0x0015233a, int > >> >nCmdShow=1) Line 29 C++ > > >> >SzSimTool.exe!__tmainCRTStartup() Line 578 + 0x35 bytes C > >> > SzSimTool.exe!WinMainCRTStartup() Line 403 C > >> > kernel32.dll!7c816fd7() > >> > [Frames below may be incorrect and/or missing, no symbols loaded for > >> >kernel32.dll] > > >> >It appears that AfxGetModuleThreadState() returns a seemingly valid > >> >AFX_MODULE_THREAD_STATE* object. > > >> >However, the memory under it is inaccessible. So, when it gets to > >> >the > >> >GetData() call inside of the CThreadLocalObject, the this pointer is > >> >pointing to memory it has no access to. Therefore, as soon as it > >> >attempts > >> >to execute if (m_nSlot == 0), it crashes with the following > >> >exception: > >> >Unhandled exception at 0x78246d10 (mfc80d.dll) in SzSimTool.exe: > >> >0xC0000005: Access violation reading location 0x05878b48. > > >> >Anyone have any ideas as to what is causing this? If not how can I go > >> >about debugging this problem. > > >> >Thanks, > >> >V > > >> Joseph M. Newcomer [MVP] > >> email: newco...(a)flounder.com > >> Web:http://www.flounder.com > >> MVP Tips:http://www.flounder.com/mvp_tips.htm-Hide quoted text - > > >> - Show quoted text - > > Joseph M. Newcomer [MVP] > email: newco...(a)flounder.com > Web:http://www.flounder.com > MVP Tips:http://www.flounder.com/mvp_tips.htm- Hide quoted text - > > - Show quoted text - |