Как отлаживать Unhandled exception.
От: MOG2 Россия  
Дата: 10.06.08 15:24
Оценка:
Есть код. В котором периодически возникает исключение:

First-chance exception at 0x1057b22b (my.dll) in app.exe: 0xC0000005: Access violation reading location 0x00000968.
Unhandled exception at 0x1057b22b (my.dll) in app.exe: 0xC0000005: Access violation reading location 0x00000968.

например в этом месте

__CLR_OR_THIS_CALL ~_Iterator_base()
{    // destroy the iterator
    _Lockit _Lock(_LOCK_DEBUG);
    _Orphan_me();
}<----------------------------------------



И др. подобные Unhandled exception. В том числе и Integer overflow и Access violation. Причем иногда даже не удается определить где именно это исключение вывалилось.

Что такое Access violation и Integer overflow мне известно. Вопрос в другом как можно отлавливать место возникновения подобных Unhandled exception ошибок. В идеале, хотелось бы знать файл и строку возникновения этой ошибки.
А лучше получить стек вызова функций, что бы можно было пройти по списку вызовов и понять где собственно баг сидит.
как раскручивать стек вызовов я уже нашел на этом сайте. но вот как его заставить раскрутится имеено в нужный момент (после исключения) или инным способом получить его?
ну или может есть какие-нибудь еще способы отладки?

Использую C++, VS2008, STL, DirectX.
Re: Как отлаживать Unhandled exception.
От: korzh.pavel Россия  
Дата: 10.06.08 15:33
Оценка:
Здравствуйте, MOG2, Вы писали:

MOG>Есть код. В котором периодически возникает исключение:


MOG>First-chance exception at 0x1057b22b (my.dll) in app.exe: 0xC0000005: Access violation reading location 0x00000968.

MOG>Unhandled exception at 0x1057b22b (my.dll) in app.exe: 0xC0000005: Access violation reading location 0x00000968.

MOG>например в этом месте


MOG>
MOG>__CLR_OR_THIS_CALL ~_Iterator_base()
MOG>{    // destroy the iterator
MOG>    _Lockit _Lock(_LOCK_DEBUG);
MOG>    _Orphan_me();
MOG>}<----------------------------------------
MOG>



MOG>И др. подобные Unhandled exception. В том числе и Integer overflow и Access violation. Причем иногда даже не удается определить где именно это исключение вывалилось.


MOG>Что такое Access violation и Integer overflow мне известно. Вопрос в другом как можно отлавливать место возникновения подобных Unhandled exception ошибок. В идеале, хотелось бы знать файл и строку возникновения этой ошибки.

MOG>А лучше получить стек вызова функций, что бы можно было пройти по списку вызовов и понять где собственно баг сидит.
MOG>как раскручивать стек вызовов я уже нашел на этом сайте. но вот как его заставить раскрутится имеено в нужный момент (после исключения) или инным способом получить его?
MOG>ну или может есть какие-нибудь еще способы отладки?

MOG>Использую C++, VS2008, STL, DirectX.


Идёшь в меню Debug|Exceptions там ставишь чтобы дебаггер останавливался в момент выброса исключения и запускаешься под дебагером.
Re[2]: Как отлаживать Unhandled exception.
От: MOG2 Россия  
Дата: 11.06.08 09:49
Оценка:
KP>Идёшь в меню Debug|Exceptions там ставишь чтобы дебаггер останавливался в момент выброса исключения и запускаешься под дебагером.

Есть еще одна проблема. Программа работает в полноэкранном DirectX-ом режиме, с выводом графики на оверлей. И при таких исключениях единственная возможность попасть обратно в отладчик студии, это убить прогу через Windows Task Manager или еще каким нибудь способом. После таких исключений, кроме нижнего TaskBar-а и кнопки пуск, ни чего не доступно, прога не отдает экран, пока её не убьешь. А после этого отладчик уже помочь не может. Остается только потом изучать ту трассировочную информацию, которую сам в окно Output вывел.

Я могу туда стек вызовов выводить, но как добиться, что бы это делалось именно в момент исключения?
Отлаживать такие баги в слепую, не зная причины или места сбоя, равносильно переписыванию всего кода.
Что делать?
Re[3]: Как отлаживать Unhandled exception.
От: korzh.pavel Россия  
Дата: 11.06.08 09:54
Оценка:
Здравствуйте, MOG2, Вы писали:

KP>>Идёшь в меню Debug|Exceptions там ставишь чтобы дебаггер останавливался в момент выброса исключения и запускаешься под дебагером.


MOG>Есть еще одна проблема. Программа работает в полноэкранном DirectX-ом режиме, с выводом графики на оверлей. И при таких исключениях единственная возможность попасть обратно в отладчик студии, это убить прогу через Windows Task Manager или еще каким нибудь способом. После таких исключений, кроме нижнего TaskBar-а и кнопки пуск, ни чего не доступно, прога не отдает экран, пока её не убьешь. А после этого отладчик уже помочь не может. Остается только потом изучать ту трассировочную информацию, которую сам в окно Output вывел.


MOG>Я могу туда стек вызовов выводить, но как добиться, что бы это делалось именно в момент исключения?

MOG>Отлаживать такие баги в слепую, не зная причины или места сбоя, равносильно переписыванию всего кода.
MOG>Что делать?

если есть вторая машина в сети, то удалённо отлаживай
Re[3]: Как отлаживать Unhandled exception.
От: cencio Украина http://ua-coder.blogspot.com
Дата: 11.06.08 09:57
Оценка:
Здравствуйте, MOG2, Вы писали:

KP>>Идёшь в меню Debug|Exceptions там ставишь чтобы дебаггер останавливался в момент выброса исключения и запускаешься под дебагером.

MOG> И при таких исключениях единственная возможность попасть обратно в отладчик студии, это убить прогу через Windows Task Manager или еще каким нибудь способом. После таких исключений, кроме нижнего TaskBar-а и кнопки пуск, ни чего не доступно, прога не отдает экран, пока её не убьешь. А после этого отладчик уже помочь не может. Остается только потом изучать ту трассировочную информацию, которую сам в окно Output вывел.
...
MOG>Что делать?

не единственная, такое стоит дебагать ремоут дебагером, прога будет на одном компе, а визуальник на другом, если нету второго компа, можно попробовать двухмониторную конфигурацюи, в полноекраныый режим проку открывать на отдельном мониторе, не знаю будут тут глюки или нет, сам пользовался ремоут дебагером.
Re[4]: Как отлаживать Unhandled exception.
От: MOG2 Россия  
Дата: 11.06.08 10:13
Оценка:
Здравствуйте, korzh.pavel, Вы писали:

KP>если есть вторая машина в сети, то удалённо отлаживай


Спасибо.

А что для этого нужно?
Re[5]: Как отлаживать Unhandled exception.
От: korzh.pavel Россия  
Дата: 11.06.08 10:24
Оценка:
Здравствуйте, MOG2, Вы писали:

MOG>Здравствуйте, korzh.pavel, Вы писали:


KP>>если есть вторая машина в сети, то удалённо отлаживай


MOG>Спасибо.


MOG>А что для этого нужно?


устанавливаешь WinDbg на обе машины.

Машина где у тебя есть исходники будет клиентом, то есть с неё ты будешь отлаживаться.
Другая машина будет сервером, то есть на ней ты будешь запускать свою прогу под отладчиком.
Делаешь екзэшник и pdb файл, в pdb файле лежат debug symbols. Копируешь exe и pdb на вторую машину (сервер)

На сервере открываешь WinDbg. Далее меню File|Open executable... открываешь в дебагере свой exe.
Далее на сервере пишешь что то типа такого: .server tcp:port=1025
он тебе сообщает имя станции, например STATION1

на клиенте запускаешь WinDbg, пишешь типа .remote tcp:server=STATION1,port=1025

Всё. В этот момент ты приконнектился к удалённому отладчику. На клиенте набираешь команду g, и на сервере запускается твоя прога.
Если в ней возникнет какой нибудь эксепшион то у тебя на клиенте произойдёт остановка и сможешь посмотреть callstack и всё что тебя интерисует.

Примерно так. С WinDbg идёт файл помощи, там всё хорошо расписано.
Re[5]: Как отлаживать Unhandled exception.
От: cencio Украина http://ua-coder.blogspot.com
Дата: 11.06.08 10:36
Оценка:
Здравствуйте, MOG2, Вы писали:

MOG>Здравствуйте, korzh.pavel, Вы писали:


KP>>если есть вторая машина в сети, то удалённо отлаживай


MOG>Спасибо.


MOG>А что для этого нужно?

с вижуал студией2008 идет ремоут дебагер, на диске он лежит в папке "Remote Debugger" в корне диска,
en_visual_studio_team_system_2008_development_x86_x64wow_dvd_X14-26382.iso\Remote Debugger\x86\rdbgsetup.exe

вот его и нужно ставить, после этого в студии выбираеш Attach to Process, и в диалоге выбираеш румоут дебагер и комп на котором будеш дебагать.
Re[6]: Как отлаживать Unhandled exception.
От: korzh.pavel Россия  
Дата: 11.06.08 10:41
Оценка:
Здравствуйте, cencio, Вы писали:

C>Здравствуйте, MOG2, Вы писали:


MOG>>Здравствуйте, korzh.pavel, Вы писали:


KP>>>если есть вторая машина в сети, то удалённо отлаживай


MOG>>Спасибо.


MOG>>А что для этого нужно?

C>с вижуал студией2008 идет ремоут дебагер, на диске он лежит в папке "Remote Debugger" в корне диска,
C>en_visual_studio_team_system_2008_development_x86_x64wow_dvd_X14-26382.iso\Remote Debugger\x86\rdbgsetup.exe

C>вот его и нужно ставить, после этого в студии выбираеш Attach to Process, и в диалоге выбираеш румоут дебагер и комп на котором будеш дебагать.


замечу только что в Visual Studio Standart Edition удалённого дебагера нет. Так что если у вас sdandart edition, не пугайтесь и устанавливайте WinDbg
Re[7]: Как отлаживать Unhandled exception.
От: cencio Украина http://ua-coder.blogspot.com
Дата: 11.06.08 12:36
Оценка:
Здравствуйте, korzh.pavel, Вы писали:

KP>Здравствуйте, cencio, Вы писали:


C>>Здравствуйте, MOG2, Вы писали:


MOG>>>Здравствуйте, korzh.pavel, Вы писали:


KP>>>>если есть вторая машина в сети, то удалённо отлаживай


MOG>>>Спасибо.


MOG>>>А что для этого нужно?

C>>с вижуал студией2008 идет ремоут дебагер, на диске он лежит в папке "Remote Debugger" в корне диска,
C>>en_visual_studio_team_system_2008_development_x86_x64wow_dvd_X14-26382.iso\Remote Debugger\x86\rdbgsetup.exe

C>>вот его и нужно ставить, после этого в студии выбираеш Attach to Process, и в диалоге выбираеш румоут дебагер и комп на котором будеш дебагать.


KP>замечу только что в Visual Studio Standart Edition удалённого дебагера нет. Так что если у вас sdandart edition, не пугайтесь и устанавливайте WinDbg


ошибаетесь, в 2008 студии для С++ он есть в Стандарт едишине
http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx
Re[8]: Как отлаживать Unhandled exception.
От: korzh.pavel Россия  
Дата: 11.06.08 12:52
Оценка:
Здравствуйте, cencio, Вы писали:

>>>с вижуал студией2008 идет ремоут дебагер, на диске он лежит в папке "Remote Debugger" в корне диска,

C>>>en_visual_studio_team_system_2008_development_x86_x64wow_dvd_X14-26382.iso\Remote Debugger\x86\rdbgsetup.exe

C>>>вот его и нужно ставить, после этого в студии выбираеш Attach to Process, и в диалоге выбираеш румоут дебагер и комп на котором будеш дебагать.


KP>>замечу только что в Visual Studio Standart Edition удалённого дебагера нет. Так что если у вас sdandart edition, не пугайтесь и устанавливайте WinDbg


C>ошибаетесь, в 2008 студии для С++ он есть в Стандарт едишине

C>http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx

отлично. Спасибо за инфу.
Просто на работе 2005'ый standart edition стоит. там нету.
Re[8]: Как отлаживать Unhandled exception.
От: MOG2 Россия  
Дата: 14.06.08 16:01
Оценка:
Здравствуйте, cencio, Вы писали:

C>ошибаетесь, в 2008 студии для С++ он есть в Стандарт едишине

C>http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx

Целый день пытаюсь настроить эту удаленную отладку в VS2008.

Но ... Куча проблем, возникающие одна за одной, так пока и не позволили приступить к отладке.

С политиками безопасности я вроде разобрался. И даже msvsmon стал сообщать что мол COMP1\USER1 connected.

но вот на той машине с которой пытаюсь отлаживать вываливается ошибка Unable to connect to the ... . The Visual Studio Remote Debugger on the target computer cannot connect back to this computer. Authentication faield. Please see Help for assistence.

Заглянул в MSDN, там про это написано:

Machine Debug Manager (mdm.exe) is not installed or failed to start properly.Solution

Reinstall the remote debugging files on the remote machine, using your Visual StudioВ .NET setup disc. If reinstalling does not fix the error, there may be a COM problem. Contact Microsoft Product Support Services (PSS) for more information.

заглянул в \Program Files\Common Files\Microsoft Shared\VS7Debug (кажется здесь он должен лежать), там действительно нет файла mdm.exe, а вот pdm.dll, который он подгружает есть.
мистика.

Я что то не пойму студию поставил целиком (VS2008 team edition), Винда (XP pro) тоже полная, где взять этот Machine Debug Manager (mdm.exe).

или дело не в нем?

спасибо за помощь.
Re[8]: Как отлаживать Unhandled exception.
От: MOG2 Россия  
Дата: 14.06.08 16:04
Оценка:
Здравствуйте, cencio, Вы писали:

К стати Remote Debugger\x86\rdbgsetup.exe поставил на обеих машинах. и вроде успешно. но все равно не работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.