Стандартная библиотека Kotlin имеет аккуратную функцию require
, что-то вроде времени выполнения assert
:
@kotlin.internal.InlineOnly
public inline fun require(value: Boolean, lazyMessage: () -> Any): Unit {
contract {
returns() implies value
}
if (!value) {
val message = lazyMessage()
throw IllegalArgumentException(message.toString())
}
}
Когда я отлаживаю, я хотел бы иметь возможность установить точку останова в этой функции непосредственно перед тем, как выдается исключение. Таким образом, у меня будет полная трассировка стека и локальные переменные, видимые в отладчике, когда требование нарушено. Тем не менее, это не похоже на работу:
Сначала я подумал, что это потому, что require
- это inline
функция. Я провел эксперимент с одной из моих inline
функций, и отладчик остановился, как и ожидалось.
В качестве обходного пути я попытался настроить отладчик так, чтобы он ломался при исключениях, но среда, с которой я работаю (Spring), выбрасывает кучу исключений при каждом запуске приложения, делая крайне утомительным игнорирование не относящихся к делу исключений.
Я хотел бы знать , как заставить его работать, но меня также интересует , почему из "это не работает".