Описанное поведение не является строго возможно , но работа с желаемым эффектом.
Проблема, с которой вы сталкиваетесь, заключается в том, что в Visual Studio выполнение приостанавливается, и мы видим исключения из наиболее доступного местоположения с информацией об отладке. Для методов структуры это означает вызов метода, хотя исключение вызывает несколько вызовов глубже. Поскольку исключение исходит из того же проекта, который вы отлаживаете, у вас всегда будет отладочная информация для фактической строки throw
, и, таким образом, вы всегда будете достигать этой линии.
Обходной путь здесь заключается в том, чтобы использовать окно Call Stack
в VS, которое будет содержать пару строк по вызову метода, вызвавшему ошибку, и двойное нажатие на это приведет к тому, где вы хотите быть, включая все локальные переменные во время разговора. Это аналогично поведению структуры, потому что, если вы посмотрите на трассировку стека, несколько кадров помечены как «внешние», потому что у них нет информации об отладке.
EDIT: Чтобы добавить некоторую информацию о поведении try
и catch
, catch
будет реагировать на любые исключения уже не поймали - таким образом, даже если исключение несколько вызовов глубже, если она не обрабатывается время стек вызовов разворачивается в ваш блок try
, он попадет в соответствующий блок catch
(если таковой имеется).
ли вы имеете в виду 'Int А = retrieveInt(),' 'в вашем методе Main'? – Habib
Почему вы хотите усложнить отладку кода? –
Да, я имел в виду retrieveInt(). Я хочу, чтобы было легче отлаживать, поскольку в разных частях моего кода нужно обрабатывать по-разному по-разному. –