Я собрал программу на C ++ с использованием Visual Studio 2008. Релиз и отладочная версия аварийно завершаются.Частота сбоев зависит от компьютера, на котором он работает (от одного раза в неделю до каждого часа).
Программа использует boost asio для связи по TCP, а также wxWidget для пользовательского интерфейса.Тем не менее, сбои не связаны с какой-либо проблемой TCP или взаимодействием с пользовательским интерфейсом, так как в основном это происходит, когда программа простаивает.
Вот стек вызовов, который у меня возникает при сбое:
msvcr90d.dll!_NMSG_WRITE(int rterrnum=10) Line 198 C
msvcr90d.dll!abort() Line 59 + 0x7 bytes C
msvcr90d.dll!terminate() Line 130 C++
enf_client.exe!boost::thread::thread_start_function(void * param=0x00161e60) Line 184 C++
msvcr90d.dll!_callthreadstartex() Line 348 + 0xf bytes C
msvcr90d.dll!_threadstartex(void * ptd=0x01385d28) Line 331 C
kernel32.dll!7c80b729()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll
IЯ не знаю, как отладить эту вещь.Если у вас есть представление о том, где искать, это было бы замечательно.
EDIT
Я заметил это в моей трассировке отладки, непосредственно перед сбоем:
First-chance exception at 0x7c812afb in enf_client.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0189efd4..
Я не могу понять, что находится в памяти по этому адресу (выглядит много мусора):
L.H............. ð..0.=..zH. ð...ð.......
Какие функции могут вызвать это, кроме функции at
контейнеров stl?