Как несколько ответов указали, скажите Visual Studio повреждаться на Броске для NullReferenceException.
, Как сказать VS повреждаться, когда необработанные исключения брошены
Поэтому теперь, когда это произойдет, VS сразу повредится, и Текущая строка Оператора будет находиться по выражению, которое оценило к пустому указателю.
Это средство полезно для всех видов исключений, включая пользовательские (может добавить полностью определенное имя типа, и VS будет соответствовать ему во время Отладки)
, один недостаток к этому подходу состоит в том, если существует код, загруженный в отладчике, который следует плохой практике броска и ловли большого количества исключений, которые Вы ищете, в этом случае это возвращается в стог сена / проблема иглы (если Вы не можете зафиксировать тот код, конечно - тогда Вы решили две проблемы:)
Еще один прием, который может пригодиться (но только на некоторых языках) является использованием Когда (или эквивалентный) ключевое слово... В VB это похоже
Try
' // Do some work '
Catch ex As Exception When CallMethodToInspectException(ex)
End Try
, прием здесь - то, что, Когда выражение оценено , прежде чем стек вызовов раскручен к блоку Выгоды . Таким образом, при использовании отладчика можно установить точку останова, что выражение, и если Вы смотрите на окно стека вызовов (Отладка | Windows | Стек вызовов), Вы видите и перешли для выравнивания, который инициировал исключение.
(Можно принять решение возвратить false от CallMethodToInspectException, таким образом, блок Выгоды будет проигнорирован и время выполнения продолжит поиск через стек для соответствующего блока Выгоды - который может допускать вход, который не влияет на поведение, и с меньше служебным, чем выгода и перебросок)
, Если Вы просто интересовались неинтерактивным входом, затем предполагая, что у Вас есть Отладочная сборка (или в некоторой степени как Вы имеете, заключают сделку с проблемами оптимизации, Сборку конечных версий с PDBs), Вы могли добраться, большая часть информации должна была разыскать ошибку от Исключения ToString с включенным stack-trace-with-line-number.
, Если однако номер строки не был достаточно, можно получить номер столбца также (так в значительной степени, локальная деталь или выражение, которое является пустым) путем извлечения StackTrace для исключения (использующий или вышеупомянутую технику, или только в самом блоке выгоды):
int colNumber = new System.Diagnostics.StackTrace(ex, true).GetFrame(0).GetFileColumnNumber();
, В то время как я не видел то, что он делает для NullReference или других исключительных ситуаций во время выполнения, может также интересоваться рассмотрением Охотник за Исключением как инструмент статического анализа.
Я не очень хорошо знаком с ManualResetEvent, но на основе документации , похоже, класс NSCondition может быть тем, что вы ищете.
NSCondition ни в коем случае не является точным эквивалентом, но он обеспечивает аналогичные функции сигнализации. Вы также можете прочитать на NSLock .
Ah, those are poor man's condition variables.
You could use the NSCondition
class, but I think it's better
to go straight to the source. Start with pthread_cond_init
.
You gonna love it.