Сорри, если оффтоп. Возникла проблема с отладкой приложения внутри explorer.exe под вистой. Вообще, она рестартит explorer.exe, если там произошла ошибка. Т.е. возможности отладить приложения как бы и нет (при этом, JIT отладчик выставлен Olly). Единственное, где можно посмотреть сведения об ошибке - это системный журнал. Вопрос: как заставить Vista предлагать отладить explorer.exe, а не рестартить его? Теперь о самой ошибке. Ошибка это возникает _иногда_. Причём это именно свойственно только Vista. Под XP ничего подобного нет. Вот одна из гипотез: http://www.winvistatips.com/faulting-module-ntdll-dll-t578311.html Единственное место, в моём коде, которое может оказаться проблематичным, это переопределённые операторы new & delete: Код (Text): HANDLE g_p_heap = NULL; void* __cdecl malloc(size_t _Size) { if (!g_p_heap) { g_p_heap = HeapCreate(0, 0, 0); } void* res = RtlAllocateHeap(g_p_heap, 0, _Size); memset(res, 0, _Size); return res; } void __cdecl free(void* _Memory) { if (g_p_heap && _Memory) { RtlFreeHeap(g_p_heap, 0, _Memory); } } void* __cdecl operator new[](unsigned int size) { return malloc(size); } void __cdecl operator delete(void* p) { free(p); } Что это вообще может означать - я тру какие-то указатели в heap'е, из-за этого, через некоторое время вываливается исключение о его повреждении или что? Т.е. если бы я использовал какое-нибудь страничное распределение памяти типа этого: http://forum.antichat.ru/thread37379.html, то у меня был бы просто Access Violation ? Вопрос: как лучше всего вылавливать такие ошибки?
gribodemon Неужеле так сложно в пару кликов в оле найти нужный код, или у вас рассово нежелание использовать отладчики, дизасмы и пр. ? Что за код ошибки не знаю. Просмотр в течении нескольких секунд нтдлл от висты под олей выявил кучу ссылок на этот код ошибки(символы лень качать, это ведь вам нужно, тоесть хз что за рантайм), большинство из них находятся в функах менеджера хипа. Касательно перезапуска - поиск не рулит уже ? Это для XP, мб в висле тоже самое.
Кстати, интересный вопрос. Я пишу софт на C++. Обычно, если возникает ошибка, я просматриваю эту ситуацию в Olly (ну, там, выясняю причину ошибки, смотрю стэк и пр.). Потом возникает задача - выяснить где в C++ коде произошла эта ошибка. Собственно, я делаю Listing Files (настройка в студии) с сорцами на С++ и ASM-листингом. Ну и ищу там по последовательности команд. Вопрос: Как упростить задачу поиска вот этого места в C++ коде ? М... Вроде как есть PDB файлы с отладочной информацией. Вроде как там пишется исходный код. ... Умеет ли Olly подгружать их и вообще - как их использовать ? Я как раз про то, что в Vist'е по дефолту вырублено это.
gribodemon Первая ольга читает отладочные символы отлично. Вторая не читает их. Копируете пдб в каталог с олей и открываете модуль. Таким образом я всё смотрю обычно, ядро в том числе(мне привычней видеть код под олей, а не под идой). Потом переходите на нтдлл и жмёте Search for -> Constant, вбиваете туда свой код ошибки и созерцаете процедуру, в которой эта ошибка.