Как отлаживать код, который взаимодействует с низкоуровневыми API (такими как порты завершения ввода / вывода)?
Я написал консольное приложение, которое использует Socket
"s *Async
множество методов и время от времени вылетает. Он не показывает мне, где он генерировал исключение, как синхронизированный код, консоль просто выключается, и я понятия не имею, что я сделал неправильно.
Есть ли способ обнаружения исключений, когда дело доходит до асинхронных операций, как это, не зная, где поставить try
/catch
блок?
Все, что мне нужно, это знать, какая часть кода вызывает сбой моего приложения.
Редактировать:
Обычная вещь с необработанными исключениями - когда вы отлаживаете код с помощью Visual Studio, он приостанавливает выполнение и показывает строку кода, вызвавшего исключение (или, по крайней мере, сообщение об исключении). Но в некоторых ситуациях (например, при взаимодействии с низкоуровневым API, таким как IOCP) ваша программа просто падает, и отладка завершается без информации о ее причине.
Мне нужен способ увидеть это конкретное исключение:
"Что случилось или где (каким способом) это произошло, так что моя программа потерпела крах?"
Поэтому я не спрашиваю "Что я сделал не так?", Я спрашиваю: "Как я могу узнать, что я сделал не так?"
- Могу ли я сделать прерывание выполнения в точке, где выдается исключение?
- Могу ли я увидеть стек вызовов после сбоя, чтобы определить метод, который вызвал его?
- Не могли бы вы дать совет, чтобы избежать подобных ситуаций?
2 ответа
Нажмите Debug-menu -> Exceptions
, Удостовериться Common Language Runtime Exceptions
брошены. Иногда в среде IDE эта опция отключается. Я не знаю почему, но это раздражает.
Включите ведение журнала System.Net, чтобы увидеть, что происходит под ним.