Ужасно хаки, но без хуков времени выполнения (я не знаю ни одного), единственный способ добраться до фрейма стека, куда вы бросаете из ....
Все исключения, о которых известно, что они генерируются терминалом, должны иметь в своем конструкторе следующее:
#if DEBUG
System.Diagnostics.Debugger.Launch()
#endif
Это приведет к диалоговому окну, позволяющему пользователю либо указать соответствующий отладчик, либо выбрать «нет», и отладка не произойдет (в любом случае исключение будет завершено, а затем будет сгенерировано. Это очевидно работает только для исключений, источником которых вы управляете.
Я не рекомендую этого, в отладочной сборке с подключенным отладчиком вы можете просто выбрать «Первый шанс» на разрыв при исключении, который обычно должен быть достаточным для ваших нужд.
Другой вариант - начать программно генерировать мини-дампы на сайтах сгенерированных исключений, затем такие данные можно будет проверить позже с помощью такого инструмента, как windbg, но не слишком сильно повлиять на требуемое поведение исключения, разматывающего стек после.
Исключением, попадающим в ловушку, является именно тот стек, который вам не нужен, извините.
Если вы знакомы с C ++ и хотите, вы можете создать небольшую (но сложную для понимания) форк моно, которая вызовет все исключения для запуска отладчика. В качестве альтернативы просто пересоберите исключительный класс BCL моно, чтобы сделать то же самое, что описано выше ..