ann_nef
|
|
« : 28-10-2010 05:30 » |
|
Ошибка такая: First-chance exception in <имяпрограммы>.exe(NTDLL):0xc0000008:Invalid Handle. Причём отладчик вылетает почти сразу при запуске. А без отладчика программа работает. В инете видела вопросы об этой ошибке, но не увидела решения.
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #1 : 28-10-2010 05:35 » |
|
Какой отладчик? Студийный? Как понять "отладчик вылетает", это всмысле студия падает или как?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 28-10-2010 05:36 » |
|
ann_nef, а что делаешь, когда ошибка выскакивает ?
|
|
|
Записан
|
|
|
|
ann_nef
|
|
« Ответ #3 : 28-10-2010 08:12 » |
|
Ошибка выскакивает -нажимаю ОК- появляется окно на ассемблере с командой , кот.не нравится. А я просто завершаю процесс отладки: SHIFT - F5
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #4 : 28-10-2010 08:19 » |
|
Всё это крайне интересно, действительно ли ошибка в ntdll, и почему адрес ядерный. Только пока ничего неясно. Ты отладку не завершай, а нажми сперва в меню "call stack" (кажется это в меню Debug (не помню уже)). Разверни окно стэка, сделай скриншот и выложи его.
|
|
« Последнее редактирование: 28-10-2010 08:22 от resource »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 28-10-2010 08:29 » |
|
кот.не нравится.
почему Добавлено через 1 минуту и 18 секунд:Ошибка выскакивает
и всё-таки, когда ошибка выскакивает - в InitInstance , или до, или после него ? (хотя бы это скажи)
|
|
« Последнее редактирование: 28-10-2010 08:31 от Алексей1153 »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #6 : 28-10-2010 08:56 » |
|
Ошибка выскакивает там, где используется инвалидный хэндл. А вот кто его создаёт - узнать очень просто, пройдясь дебаггером по стартовому коду. Добавлено через 1 минуту:кот.не нравится.
почему Лёш, ну какой же девушке, такой лохматый, небритый кот понравится! Хоть бы причесался.
|
|
« Последнее редактирование: 28-10-2010 08:57 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
ann_nef
|
|
« Ответ #7 : 28-10-2010 09:16 » |
|
дддаа
|
|
« Последнее редактирование: 28-10-2010 10:26 от ann_nef »
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #8 : 28-10-2010 09:21 » |
|
ann_nef, я конечно, не администратор и не модератор, но вроде как указал один из путей коллективного исследования проблемы.
|
|
|
Записан
|
|
|
|
ann_nef
|
|
« Ответ #9 : 28-10-2010 09:21 » |
|
Не вижу своего сообщения, поэтому повторю: RESOURCE, спасибо, благодаря вашей подсказке о стеке разобралась откуда ошибка лезла.
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #10 : 28-10-2010 09:25 » |
|
Ну так надо же довести до нас эту информацию. Нам ведь тоже интересно.
|
|
|
Записан
|
|
|
|
ann_nef
|
|
« Ответ #11 : 28-10-2010 09:44 » |
|
Инвалидный хэндл образовался или получился из-за того, что не всё закомментировала в программе для отключения работы с прибором( в тот момент я отлаживала то,что к нему отношения не имеет).
Получилась ситуация, что пыталась закрыть хэндл, который не открыт и не создан.( CloseHandle ).
Не знаю поможет ли это кому-то.
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #12 : 28-10-2010 09:56 » |
|
Поможет
Добавлено через 28 минут и 23 секунды: Разрешите подытожить.
Мне вот просто интересно стало, почему без отладчика не падало. Оказалось всё банально. Просто функция NtClose (а именно она вызывается в конечном итоге) так устроена. Но вообще можно падать и без отладчика. В системе есть, так называемые, глобальные отладочные флаги, про которые наверняка знают все многие системные разработчики. Есть в составе Debugging Tools такая утилита gflags, которая позволяет рулить этими флагами. Если установить флаг FLG_ENABLE_CLOSE_EXCEPTIONS (в gflags это зовется "enable close exception"), то можно падать и без отладчика.
ann_nef, на самом деле, тебе повезло что исключение вообще возникло (исключения это хорошо (как и БСОДы)). Так ты смогла обнаружить и устранить проблему. Было бы убийственно, если в таблице хэндлов оказался бы (волей случая) хэндл с таким же значением как тот, что ты передавала. В таком случае, он бы просто закрылся. И выявить баг тут было бы....... мягко говоря, очень сложно. Зато теперь ты приобрела немного умения пользоваться отладчиком и узнала, что такое callstack и насколько он полезен.
|
|
« Последнее редактирование: 28-10-2010 10:24 от resource »
|
Записан
|
|
|
|
|