В Javascript предположим, что я хочу выполнить некоторую очистку, когда произойдет исключение, но пусть исключение продолжает распространяться по стеку, например:
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
Проблема с этим кодом заключается в том, что улавливание и повторное создание исключения приводит к тому, что информация трассировки стека до этой точки теряется, поэтому, если исключение впоследствии будет заимствовано снова, выше в стеке, трассировка стека только снижается к повторному броску. Это отстой, потому что это означает, что он не содержит функцию, которая фактически выбрала исключение.
Как оказалось, попробуйте. По сути, это то же самое поведение, по крайней мере, в Chrome (то есть, это не повторный бросок, это проблема точно, но наличие любого блока обработчика исключений вообще).
Кто-нибудь знает, как восстановить исключение в Javascript, но сохранить связанную с ним трассировку стека? В противном случае, как насчет предложений по другим способам добавления исключающих исключение обработчиков очистки, а также для захвата полных стековых следов при возникновении исключения?
Спасибо за любые указатели:)