Настройки исключений Visual Studio могут нарушить вашу отладку - PullRequest
0 голосов
/ 09 апреля 2020

Устранение серьезных проблем с помощью настроек исключений Visual Studio. Отладчики полезны. Пока они не вызывают ошибки, которые возникают только при отладке. Это печально, потому что вам все еще понадобится отладчик.

Ошибка «My» возникает в приложении windows форм, написанном на c ++ / CLI (с использованием visual studio) при вызове ShowDialog () из файлового селектора. Конфигурация релиза работает нормально, как и конфигурация отладки, пока вы нажимаете Ctrl-F5, а не F5. Я опускаю точные номера версий. Все запаздывает (st), кроме каркаса do tnet (target), который равен 4.7.2.

В Debug VS отловил исключение, которое сделало продолжение на первый взгляд невозможным. Объем памяти составляет 32 ГБ, поэтому я исключаю простые аппаратные недостатки. Общее использование при возникновении сбоя составляет около 38%, а для программы - более 300 МБ.

Ошибка - исключение 0x000006BA: сервер RP C недоступен.

Visual studio message

Имейте в виду, это не так, поскольку все работает нормально, кроме случаев отладки. Тем не менее, я запустил DISM и SF C, что привело к чистому счету здоровья. Служба удаленного вызова процедур запущена.

Моей первой, возможно, полезной мыслью была нехватка дескрипторов или связанных ресурсов. Загрузка символов практически исключена (я загрузил выборочно для трассировки стека). Но это настолько общее понятие, что я не начинал с него. Который также доказал.

Callstack:

enter image description here

Исключение не перехватывается блоком try-catch (другой поток, вероятно). Я зарегистрировал обработчики исключений, но здесь это бесполезно, так как они, по-видимому, не перехвачены: Application :: ThreadException + = gcnew System :: Threading :: ThreadExceptionEventHandler (& MyForm :: OnUnhandled); Тем не менее, это может быть потому, что VS ловит его первым. Но в других конфигурациях такого не происходит.

После исключения можно продолжить (F5), файловый селектор будет частично показан, а проводник полностью зависнет, что потребует полного сброса. На самом деле, это требует редактирования: нажатие на сообщение об исключении VS (дважды) и нажатие клавиши F5 позволяют правильно продолжить, но простое нажатие клавиши F5 фактически заставит вас перезагрузиться.

Это говорит о том, что освобожденный поток является частью проводника, который также объясняет, почему в стеке вызовов не видны следы моего приложения. Я предполагаю, что это исключение, которое VS обычно не должен отлавливать (если ваше приложение не использует службу RP C). И я все еще думаю, что это было ложное предупреждение в любом случае, но не могу понять, как это могло произойти.

Конечно, вы можете адаптировать настройки исключений в VS, т.е. c. исключения Win32. Это исключение (0x6ba) не упомянуто, поэтому вычеркивание было необходимым и сделало работу. Вы также должны быть в состоянии указать условие модуля для отлова, но это не похоже на сериализацию. Если с вами происходит нечто подобное, подумайте о том, чтобы вычеркнуть исключения, будь то тестовые или обычные настройки.

Хорошая отладка!

...