Решение я нашел, но использовать его пожалуй не буду. Если кому интересно:
function test() {
asdfg();
}
Object.keys(window).filter(function(key) {
return typeof window[key] == 'function' && !window[key].toString().includes('[native code]');
}).forEach(function(func) {
eval(window[func].toString());
var current_func = this[func];
window[func] = function() {
try {
return current_func.apply(this, arguments);
} catch(err) {
return { 'Вот такая ошибка': err.toString() };
}
}
});
test();
Из глобальной области видимости берем все, что является не нативной функцией и переобъявляем при помощи
eval, но уже с нужной нам оберткой. В итоге, вместо ошибок функции начинают возвращать заданный объект: