Explorar el Código

LibJS: Log any exception, not just the ones with a JS::Error value

This was super confusing as we would check if the exception's value is a
JS::Error and not log it otherwise, even with m_should_log_exceptions
set.

As a result, things like DOM exceptions were invisible to us with
execution just silently stopping, for example.
Linus Groh hace 4 años
padre
commit
55d9f1cced
Se han modificado 1 ficheros con 8 adiciones y 3 borrados
  1. 8 3
      Userland/Libraries/LibJS/Runtime/VM.cpp

+ 8 - 3
Userland/Libraries/LibJS/Runtime/VM.cpp

@@ -292,9 +292,14 @@ Value VM::construct(Function& function, Function& new_target, Optional<MarkedVal
 
 void VM::throw_exception(Exception* exception)
 {
-    if (should_log_exceptions() && exception->value().is_object() && is<Error>(exception->value().as_object())) {
-        auto& error = static_cast<Error&>(exception->value().as_object());
-        dbgln("Throwing JavaScript Error: {}, {}", error.name(), error.message());
+    if (should_log_exceptions()) {
+        auto value = exception->value();
+        if (value.is_object() && is<Error>(value.as_object())) {
+            auto& error = static_cast<Error&>(value.as_object());
+            dbgln("Throwing JavaScript exception: [{}] {}", error.name(), error.message());
+        } else {
+            dbgln("Throwing JavaScript exception: {}", value);
+        }
 
         for (ssize_t i = m_call_stack.size() - 1; i >= 0; --i) {
             const auto& source_range = m_call_stack[i]->current_node->source_range();