Как отлаживать код, который взаимодействует с низкоуровневыми API (такими как порты завершения ввода / вывода)?

Я написал консольное приложение, которое использует Socket"s *Async множество методов и время от времени вылетает. Он не показывает мне, где он генерировал исключение, как синхронизированный код, консоль просто выключается, и я понятия не имею, что я сделал неправильно.

Есть ли способ обнаружения исключений, когда дело доходит до асинхронных операций, как это, не зная, где поставить try/catch блок?

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

Редактировать:

Обычная вещь с необработанными исключениями - когда вы отлаживаете код с помощью Visual Studio, он приостанавливает выполнение и показывает строку кода, вызвавшего исключение (или, по крайней мере, сообщение об исключении). Но в некоторых ситуациях (например, при взаимодействии с низкоуровневым API, таким как IOCP) ваша программа просто падает, и отладка завершается без информации о ее причине.

Мне нужен способ увидеть это конкретное исключение:
"Что случилось или где (каким способом) это произошло, так что моя программа потерпела крах?"

Поэтому я не спрашиваю "Что я сделал не так?", Я спрашиваю: "Как я могу узнать, что я сделал не так?"

  • Могу ли я сделать прерывание выполнения в точке, где выдается исключение?
  • Могу ли я увидеть стек вызовов после сбоя, чтобы определить метод, который вызвал его?
  • Не могли бы вы дать совет, чтобы избежать подобных ситуаций?

2 ответа

Решение

Нажмите Debug-menu -> Exceptions, Удостовериться Common Language Runtime Exceptions брошены. Иногда в среде IDE эта опция отключается. Я не знаю почему, но это раздражает.

Включите ведение журнала System.Net, чтобы увидеть, что происходит под ним.

Другие вопросы по тегам