我在測試我的應用程序,並墜毀。我沒有調試,所以Windows錯誤報告踢(我是其中沒有安裝VS Windows XP虛擬機上測試,所以我認爲這就是爲什麼JIT調試沒有露面)。我啓動了Visual Studio 2010並遠程連接到違規流程。這是調用堆棧,我從崩潰的線程得到:那是什麼墜毀我的應用程序之外,給出UnhandledExceptionFilter的調用堆棧?
[email protected]()
[email protected]() + 0xc bytes
[email protected]() - 0x48 bytes
[email protected]() + 0x18 bytes
faultrep.dll!StartDWException() + 0x5df bytes
faultrep.dll!ReportFault() + 0x533 bytes
[email protected]() + 0x55c bytes
[email protected]() + 0x2f45e bytes
kernel32.dll!__except_handler3() + 0x61 bytes
[email protected]() + 0x26 bytes
[email protected]() + 0x24 bytes
[email protected]() + 0xe bytes
myDLL.dll!std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base(std::basic_ostream<char,std::char_traits<char> > & _Ostr) Line 93 + 0x2a bytes C++
myDLL.dll!std::basic_ostream<char,std::char_traits<char> >::sentry::sentry(std::basic_ostream<char,std::char_traits<char> > & _Ostr) Line 114 + 0x4e bytes C++
myDLL.dll!std::basic_ostream<char,std::char_traits<char> >::write(const char * _Str, __int64 _Count) Line 553 + 0xc bytes C++
//... more stuff from my app
這是導致它,代碼:
class _Sentry_base
{ // stores thread lock and reference to output stream
public:
__CLR_OR_THIS_CALL _Sentry_base(_Myt& _Ostr)
: _Myostr(_Ostr)
{ // lock the stream buffer, if there
if (_Myostr.rdbuf() != 0)
// ***VC++ says this next line was the return address***
_Myostr.rdbuf()->_Lock();
}
所以,我要的是找出爲什麼這個事故發生,如果現在還不算太晚 - 例如,如果這是訪問違規。我認爲這是可能的,因爲異常上下文仍然在堆棧中,但我不知道如何去實現它。
這很可能會在WinDbg中比較容易,但我害怕,如果我停止調試會話,該進程可能會死。這是一個非常罕見的錯誤,不容易重現。