2015-01-10 2 views
1

В какой-то момент при разработке моего C приложения #, следующие стали появляться в области вывода VS всякий раз, когда я создать OpenFileDialog:первого шанса исключение: Сервер RPC недоступен

First-chance exception at 0x75A6C42D (KernelBase.dll) in (myapp).exe: 0x000006BA: The RPC server is unavailable. 

Я поддержания это приложение в течение многих лет, и, безусловно, никогда не видел этого раньше, поэтому я начал откатываться в SVN, чтобы определить, когда это началось.

Непонятно, изменения, в которых это происходит & не происходит, по-видимому, несовместимы; если я вернусь достаточно далеко, это никогда не произойдет, но есть «область», когда я могу проверить ревизию, этого не произойдет, я проверю другую ревизию, она будет, затем я вернусь к первому, и это время внезапно. Другими словами, я не могу точно сказать, когда это произойдет.

Чтобы проиллюстрировать это, сделайте отрывок из моих тестов с отступом для ясности. Номера - это ревизии. Для каждого теста я «обновляю до ревизии» и выполняю полную перестройку.

 3977: Exception. This is the most-recent revision. 
3839: OK. Since it didn't happen, I'll start working my way back up to see when it starts 
    3843: OK 
    3852: OK 
    3890: Exception. So it started between 3852 & 3890. 
    3852: Exception. Huh?? I JUST tried 3852, and last time it didn't happen! 
3778: OK. Going back this far, I've never seen it happen. 
    3852: Exception. I guess I'll start working my way BACK to see when it stops. 
    3828: Exception 
    3810: OK 
    3828: Exception. Just making sure. 
    3810: OK. Just making sure again. 
    3828: OK. What?? 3828 showed the exception last time I tried! 
    3852: OK. (but previously it showed the exception) 
    3890: Exception 

Я знаю, что могу просто сказать ВС, чтобы не нарушать эти типы исключений и игнорировать их. Но, как уже упоминалось, после многих лет работы над этим программным обеспечением, я никогда не видел его один раз, поэтому я хотел бы точно определить , когда и почему они начали, а не просто закрывают глаза.

+0

Из вашего теста это кажется «случайным», поэтому, вероятно, ошибка не в вашем коде. Поскольку RPC вызывает удаленный ресурс, проверьте свою сеть, активность сервера RPC и т. Д. Например, аутентификация домена может вызвать это. –

+0

Это происходит при отключении всех сетевых подключений. Кроме того, странно, что он НИКОГДА не случается с достаточно старыми сборками (то есть версиями около 3700 или около того), и он ВСЕГДА случается на самых текущих версиях. Так что, пока это не кажется *, как будто это в моем коде ... мне по-прежнему кажется бессмысленным, что он будет вести себя так. Почему я мог бы остановить его, отбросив изменения и начать его, свернув вперед - но точные изменения, в которых это происходит, и не настолько непредсказуемы? – Metal450

+0

Попробуйте переустановить одну версию несколько раз, результат всегда один и тот же или каждая конструкция ведет себя по-другому? –

ответ

4

Это не имеет никакого отношения к вашему проекту. Когда вы используете диалоговые окна оболочки, например OpenFileDialog, вы загружаете Explorer в свой процесс. Который поставляется с большим количеством багажа, вы также загрузите все расширения оболочки. Вид, который настраивает Explorer, они работают так же хорошо в диалоговом окне.

Несовершеннолетние довольно распространены. Программисты склонны использовать тип quirkier. Любая ошибка в таком расширении оболочки теперь видна вам, отладчик сообщает вам об этом.

Итак, ничего не случилось, исключение было поймано и обработано. Explorer выполняет контрмеры против неправильных расширений оболочки, дестабилизируя их и автоматически отключает их. Таким образом, у вас просто есть расширение оболочки лайма-утки, которое не работает, низкие коэффициенты, которые вы заметили бы, поскольку он, вероятно, не работал некоторое время.

Отладчик может сказать вам, какой из них плох. Включите неуправляемую отладку и отметьте флажки «Бросок» в диалоговом окне «Отладка + исключение». Отладчик теперь остановится, когда будет выбрано исключение. Вы не увидите никакого исходного кода, но вы можете посмотреть окно отладки Call Stack для подсказок. Он отображает имя DLL, которое содержит плохой код где-то в стеке, под функциями Windows DLL. Имя должно дать вам намек, который является нарушителем спокойствия. Утилита SysInternals 'AutoRuns отлично подходит для их отключения.

+0

Хм, хорошее понимание. Тем не менее, (1) я не помню, что недавно добавил какой-либо отдаленный (я довольно анальный о том, что установлено в моей системе, и (2) Если у него нет ничего общего с проектом, разве это не кажутся очень странными, что скользящие ревизии назад окажут какое-либо влияние на то, появляется ли это или нет? Изменение изменений не повлияет на то, какие расширения проводника присутствуют, поэтому я ожидаю, что он будет либо всегда появляться, либо никогда - независимо от того, какая версия я отладки Нет? – Metal450

+0

Кроме того, насколько я могу судить, ничего не выглядит явно подозрительным в стеке вызовов. Кажется, что все MS DLL: http://screencast.com/t/VI1jPAQY0aH – Metal450

+0

davclnt.dll не принадлежит к вашему процессу Ну, не так легко избавиться. Переверните бит игнорирования. –

Смежные вопросы