* SUMMARY Stopwatch ASSERT when continuing inspector. * TEST CASE <script> try { [].x.x } catch (e) { console.log(e); } </script> * STEPS TO REPRODUCE 1. Inspect Test Case 2. Enable Breakpoints on All Exceptions 3. Reload => hits breakpoint 4. Continue => ASSERT ASSERTION FAILED: isnan(m_lastStartTime) /Users/pecoraro/Build/Debug/usr/local/include/wtf/Stopwatch.h(67) : void WTF::Stopwatch::start() 1 0x116a218b0 WTFCrash 2 0x1165ee0c1 WTF::Stopwatch::start() 3 0x1165ec0da Inspector::InspectorDebuggerAgent::didContinue() 4 0x1165ec13c non-virtual thunk to Inspector::InspectorDebuggerAgent::didContinue() 5 0x11695ad95 Inspector::ScriptDebugServer::dispatchDidContinue(Inspector::ScriptDebugListener*) 6 0x11695b3c5 Inspector::ScriptDebugServer::dispatchFunctionToListeners(WTF::HashSet<Inspector::ScriptDebugListener*, WTF::PtrHash<Inspector::ScriptDebugListener*>, WTF::HashTraits<Inspector::ScriptDebugListener*> > const&, void (Inspector::ScriptDebugServer::*)(Inspector::ScriptDebugListener*)) 7 0x11695b2cc Inspector::ScriptDebugServer::dispatchFunctionToListeners(void (Inspector::ScriptDebugServer::*)(Inspector::ScriptDebugListener*)) 8 0x11695b66c Inspector::ScriptDebugServer::handlePause(JSC::Debugger::ReasonForPause, JSC::JSGlobalObject*) 9 0x116225500 JSC::Debugger::pauseIfNeeded(JSC::ExecState*) 10 0x11622578c JSC::Debugger::updateCallFrameAndPauseIfNeeded(JSC::ExecState*) 11 0x116225867 JSC::Debugger::exception(JSC::ExecState*, JSC::JSValue, bool) 12 0x11665d185 JSC::Interpreter::unwind(void*&, JSC::ExecState*&, JSC::JSValue&) 13 0x11667d49a JSC::genericUnwind(JSC::VM*, JSC::ExecState*, JSC::JSValue) 14 0x1167e7a9a llint_slow_path_handle_exception 15 0x1167f1201 llint_entry 16 0x1167eca69 vmEntryToJavaScript 17 0x116679e7a JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) 18 0x11665e6b4 JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*) 19 0x1161fe3a0 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&, JSC::JSValue, JSC::JSValue*) 20 0x119051845 WebCore::JSMainThreadExecState::evaluate(JSC::ExecState*, JSC::SourceCode const&, JSC::JSValue, JSC::JSValue*) 21 0x119a3307d WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&, WebCore::DOMWrapperWorld&) 22 0x119a331c4 WebCore::ScriptController::evaluate(WebCore::ScriptSourceCode const&) 23 0x119a42817 WebCore::ScriptElement::executeScript(WebCore::ScriptSourceCode const&) 24 0x119a417e0 WebCore::ScriptElement::prepareScript(WTF::TextPosition const&, WebCore::ScriptElement::LegacyTypeSupport) 25 0x118abb0d9 WebCore::HTMLScriptRunner::runScript(WebCore::Element*, WTF::TextPosition const&) 26 0x118abaee9 WebCore::HTMLScriptRunner::execute(WTF::PassRefPtr<WebCore::Element>, WTF::TextPosition const&)
<rdar://problem/18868233>
Others have seen the ASSERT in Stopewatch::stop() as well due to a reload.
I will look at this today.
I'm hearing WebKit developers run into this frequently.
Created attachment 244581 [details] Patch
Comment on attachment 244581 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=244581&action=review > Source/JavaScriptCore/ChangeLog:9 > + We were unconditionally resuming the stopwatch even if we never > + never paused it in the first place. Maintain a flag for whether Nit: "never never"
Committed r178433: <http://trac.webkit.org/changeset/178433>