ntdll.dll [Кадры ниже могут быть неверными/отсутствовать, символы для ntdll.dll не загружены]

через несколько недель я столкнулся с этой ситуацией, и это очень расстраивает,

моя программа отлаживает очень хорошо, без ошибок, когда я запускаю программу, она выполняет начальную часть работы, через несколько секунд она завершается опцией «прерывать продолжение», и в стеке вызовов, когда я смотрю, она поворачивается из того, что это ошибка из ntdll.dll и msvcr100d.dll, это похоже на проблему SDK, связанную с Windows, это тоже похоже на плохой указатель. Я как-то не контролирую это. Я установил Windows SDK до 7.0, но ничего не изменилось,

Использование: Windows 7 64 бит, Boost 1.48, компилятор Visual Studio (полная версия), openCV2.3, c++.

Я перепробовал много вариантов,

например. перейти к диспетчеру задач и, щелкнув правой кнопкой мыши на devenv.exe и выбрав только один в «установить сходство», переустановить Windows SDK, переустановив несколько раз мой собственный проект.

Мне ничего не помогло, может кто-нибудь предложить мне хорошее решение, пожалуйста.

для большей ясности вот мой стек вызовов

ntdll.dll!77e615de()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
ntdll.dll!77e615de()    
ntdll.dll!77e5014e()    
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77eb73bc()    
ntdll.dll!77ea3c48()    
ntdll.dll!77e5016e()    
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77eb74df()    
ntdll.dll!77eb73bc()    
ntdll.dll!77ea3c48()    
ntdll.dll!77e5016e()    
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77eb74df()    
ntdll.dll!77eb73bc()    
ntdll.dll!77ea3c48()    
ntdll.dll!77e5016e()    
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77eb74df()    
ntdll.dll!77eb73bc()    
ntdll.dll!77ea3c48()    
kernel32.dll!770012ea()     
kernel32.dll!77001314()     
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77eb74df()    
ntdll.dll!77eb73bc()    
ntdll.dll!77ea3c48()    
ntdll.dll!77e5016e()    
msvcr100d.dll!_getptd_noexit()  Line 500    C
ntdll.dll!77e9b459()    
ntdll.dll!77e9b42b()    
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >::clear()  Line 1415  C++
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >::erase(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> > > _Last)  Line 1383 C++
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >::_Tidy()  Line 1866 + 0x5d bytes C++
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >::~_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >()  Line 792 C++
bowExample.exe!std::set<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> >::~set<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> >()  + 0x2b bytes   C++
bowExample.exe!set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> >::~set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> >()  + 0x63 bytes  C++
bowExample.exe!set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> >::`scalar deleting destructor'()  + 0x2b bytes   C++
bowExample.exe!boost::checked_delete<set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> > >(set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> > * x)  Line 34 + 0x2b bytes C++
bowExample.exe!boost::scoped_ptr<set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> > >::~scoped_ptr<set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> > >()  Line 80 + 0xb bytes  C++
bowExample.exe!bowTest(CBoWIMUParams & BOWIMUPARAMS)  Line 192 + 0xf bytes  C++
bowExample.exe!main(int argc, char * * argv)  Line 225 + 0xc bytes  C++
bowExample.exe!__tmainCRTStartup()  Line 555 + 0x19 bytes   C
bowExample.exe!mainCRTStartup()  Line 371   C
kernel32.dll!7700339a()     
ntdll.dll!77e79ef2()    
ntdll.dll!77e79ec5()    

Вот стек вызовов после загрузки символов

ntdll.dll!_ZwRaiseException@12()  + 0x12 bytes  
ntdll.dll!_ZwRaiseException@12()  + 0x12 bytes  
msvcr100d.dll!__getptd_noexit()  + 0xae bytes   

bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >::clear()  Line 1415  C++
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >::erase(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> > > _Last)  Line 1383 C++
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >::_Tidy()  Line 1866 + 0x5d bytes C++
bowExample.exe!std::_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >::~_Tree<std::_Tset_traits<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128>,0> >()  Line 792 C++
bowExample.exe!std::set<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> >::~set<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> >()  + 0x2b bytes   C++
bowExample.exe!set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> >::~set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> >()  + 0x63 bytes  C++
bowExample.exe!set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> >::`scalar deleting destructor'()  + 0x2b bytes   C++
bowExample.exe!boost::checked_delete<set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> > >(set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> > * x)  Line 34 + 0x2b bytes C++
bowExample.exe!boost::scoped_ptr<set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> > >::~scoped_ptr<set2<CBoWMatch<int>,CBoWMatch<int>::MatchSort,CIndividualPool_NoFree_Allocator<CBoWMatch<int>,128> > >()  Line 80 + 0xb bytes  C++
bowExample.exe!bowTest(CBoWIMUParams & BOWIMUPARAMS)  Line 193 + 0xf bytes  C++
bowExample.exe!main(int argc, char * * argv)  Line 216 + 0xc bytes  C++
bowExample.exe!__tmainCRTStartup()  Line 555 + 0x19 bytes   C
bowExample.exe!mainCRTStartup()  Line 371   C
kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes    
ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes   
ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes    

person Mahika    schedule 12.06.2012    source источник
comment
Надеюсь, полезно: stackoverflow .com/questions/413477/   -  person sarnold    schedule 12.06.2012
comment
У вас нет контроля над этим? Обычно ответ на ошибки, вызванные недопустимыми указателями, заключается в том, чтобы не передавать недопустимые указатели. Если это ошибка MS (что я считаю маловероятным, но не невозможным), пожалуйста, покажите это, включив простое приложение, которое, очевидно, не содержит ошибок, но приводит к ошибкам, которые вы описываете.   -  person    schedule 12.06.2012
comment
Глядя на нижнюю часть трассировки, похоже, что у вас есть класс set2, возможно, производный от std::set. Я бы начал искать там, плюс что делает функция bowTest со своим scoped_ptr. Вероятность найти ошибку там гораздо выше, чем в boost или стандартной библиотеке компилятора.   -  person Bo Persson    schedule 12.06.2012
comment
sarnold: Я не знаю, чем поможет ваша ссылка, но я внимательно посмотрю на нее через несколько минут.   -  person Mahika    schedule 12.06.2012
comment
hvd: Хотел бы я, чтобы это было так просто сделать. самое главное, что он входит в заголовки boost, и это очень сложно понять. Вот почему мне это трудно. Я посмотрю, смогу ли я его произвести. Спасибо   -  person Mahika    schedule 12.06.2012
comment
Бо Перссон: set2 взят из scoped_ptr.hpp от boost. Я еще раз посмотрю на Bowtest еще раз и вернусь   -  person Mahika    schedule 12.06.2012
comment
Как указано в моем ответе, пока вы не загрузите символы отладки из Microsoft, вы можете увидеть неправильную трассировку стека.   -  person Paolo Brandoli    schedule 12.06.2012
comment
@timothy Предполагая, что вы не изменили заголовки Boost, простое приложение, которое использует Boost и вызывает эту проблему, также будет хорошим образцом. Если вы это сделаете, вам не нужно понимать, как Boost делает то, что он делает, вам нужно только понять, что делает ваша собственная программа.   -  person    schedule 12.06.2012
comment
@hvd Без символов трассировка стека может быть просто неправильной, независимо от того, где находится ошибка. msdn.microsoft.com/en -нас/библиотека/окна/рабочий стол/   -  person Paolo Brandoli    schedule 12.06.2012
comment
@PaoloBrandoli Исправление приветствуется, предыдущий комментарий отозван :)   -  person    schedule 12.06.2012
comment
Вы должны опубликовать содержимое main и bowTest   -  person Paolo Brandoli    schedule 12.06.2012


Ответы (2)


Щелкните правой кнопкой мыши строку стека (в трассировке стека), содержащую ntdll.dll, и загрузите символы отладки с сервера Microsoft (Загрузить символы из...), тогда трассировка стека, вероятно, немного изменится. Повторите операцию для каждой dll с неопределенными символами.

Пока вы не загрузите символы отладки, вы, вероятно, будете смотреть на неправильную трассировку стека.

person Paolo Brandoli    schedule 12.06.2012
comment
Паоло: да, немного изменилось, но я не могу прояснить проблему, спасибо - person Mahika; 12.06.2012
comment
Попробуйте повторить операцию для всех dll без символов - person Paolo Brandoli; 12.06.2012
comment
Используемые DLL: ntdll.dll!_ZwRaiseException@12() + 0x12 байт, msvcr100d.dll!__getptd_noexit() + 0xae байт и kernel32.dll!_UnhandledExceptionFilter@4() + 0x11d байт - person Mahika; 12.06.2012
comment
@timothy Можете ли вы повторно опубликовать трассировку стека после загрузки символов? - person Paolo Brandoli; 12.06.2012

Это начало происходить со мной без видимой причины. После просмотра свойств проекта я заметил, что рабочий каталог был каким-то образом удален (он был просто пустым), после его установки в правильный каталог все снова заработало.

Очевидно, мое простое решение может не сработать для вас, мне повезло.

person EJ Thayer    schedule 01.07.2018