Hello, I'm also from the NativeScript team...

Another case that we found to hang the same way is whenever we handle the `
*Debugger.setBreakpointByUrl*` protocol message, in which case we see the 
following stack:

v8_inspector::(anonymous 
namespace)::ActualScript::setBreakpoint(v8_inspector::String16 const&, 
v8::debug::Location*, int*) const v8-debugger-script.cc:255 
v8_inspector::V8DebuggerAgentImpl::setBreakpointImpl(v8_inspector::String16 
const&, v8_inspector::String16 const&, v8_inspector::String16 const&, int, 
int) v8-debugger-agent-impl.cc:953 
v8_inspector::V8DebuggerAgentImpl::setBreakpointByUrl(int, 
v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, 
v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, 
v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, 
v8_crdtp::detail::ValueMaybe<int>, 
v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, 
v8_inspector::String16*, 
std::__Cr::unique_ptr<std::__Cr::vector<std::__Cr::unique_ptr<v8_inspector::protocol::Debugger::Location,
 
std::__Cr::default_delete<v8_inspector::protocol::Debugger::Location> >, 
std::__Cr::allocator<std::__Cr::unique_ptr<v8_inspector::protocol::Debugger::Location,
 
std::__Cr::default_delete<v8_inspector::protocol::Debugger::Location> > > 
>, 
std::__Cr::default_delete<std::__Cr::vector<std::__Cr::unique_ptr<v8_inspector::protocol::Debugger::Location,
 
std::__Cr::default_delete<v8_inspector::protocol::Debugger::Location> >, 
std::__Cr::allocator<std::__Cr::unique_ptr<v8_inspector::protocol::Debugger::Location,
 
std::__Cr::default_delete<v8_inspector::protocol::Debugger::Location> > > > 
> >*) v8-debugger-agent-impl.cc:582 
v8_inspector::protocol::Debugger::DomainDispatcherImpl::setBreakpointByUrl(v8_crdtp::Dispatchable
 
const&) Debugger.cpp:1333 
v8_inspector::protocol::Debugger::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
 
char>)::$_29::operator()(v8_crdtp::Dispatchable const&) const 
Debugger.cpp:519 
decltype(std::__Cr::forward<v8_inspector::protocol::Debugger::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
 
char>)::$_29&>(fp)(std::__Cr::forward<v8_crdtp::Dispatchable const&>(fp0))) 
std::__Cr::__invoke<v8_inspector::protocol::Debugger::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
 
char>)::$_29&, v8_crdtp::Dispatchable 
const&>(v8_inspector::protocol::Debugger::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
 
char>)::$_29&, v8_crdtp::Dispatchable const&) type_traits:3694 void 
std::__Cr::__invoke_void_return_wrapper<void, 
true>::__call<v8_inspector::protocol::Debugger::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
 
char>)::$_29&, v8_crdtp::Dispatchable 
const&>(v8_inspector::protocol::Debugger::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
 
char>)::$_29&, v8_crdtp::Dispatchable const&) __functional_base:348 
std::__Cr::__function::__default_alloc_func<v8_inspector::protocol::Debugger::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
 
char>)::$_29, void (v8_crdtp::Dispatchable 
const&)>::operator()(v8_crdtp::Dispatchable const&) functional:1611 void 
std::__Cr::__function::__policy_invoker<void (v8_crdtp::Dispatchable 
const&)>::__call_impl<std::__Cr::__function::__default_alloc_func<v8_inspector::protocol::Debugger::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
 
char>)::$_29, void (v8_crdtp::Dispatchable const&)> 
>(std::__Cr::__function::__policy_storage const*, v8_crdtp::Dispatchable 
const&) functional:2092 void std::__Cr::__function::__policy_invoker<void 
()>::__call_impl<std::__Cr::__function::__default_alloc_func<v8_crdtp::UberDispatcher::Dispatch(v8_crdtp::Dispatchable
 
const&) const::$_0, void ()> >(std::__Cr::__function::__policy_storage 
const*) 0x00000000b91e6ee1 v8_crdtp::UberDispatcher::DispatchResult::Run() 
0x00000000b91e516a 
v8_inspector::V8InspectorSessionImpl::dispatchProtocolMessage(v8_inspector::StringView)
 
v8-inspector-session-impl.cc:451 
tns::JsV8InspectorClient::doDispatchMessage(v8::Isolate*, 
std::__Cr::basic_string<char, std::__Cr::char_traits<char>, 
std::__Cr::allocator<char> > const&) JsV8InspectorClient.cpp:131 
tns::JsV8InspectorClient::dispatchMessage(std::__Cr::basic_string<char, 
std::__Cr::char_traits<char>, std::__Cr::allocator<char> > const&) 
JsV8InspectorClient.cpp:89 
::Java_com_tns_AndroidJsV8Inspector_dispatchMessage(JNIEnv *, jobject, 
jstring) com_tns_AndroidJsV8Inspector.cpp:29 
art_quick_generic_jni_trampoline 0x00000000e400b2b3 art_quick_invoke_stub 
0x00000000e4004aa3 art::ArtMethod::Invoke(art::Thread*, unsigned int*, 
unsigned int, art::JValue*, char const*) 0x00000000e4099502 
art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, 
art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*) 
0x00000000e424f882 bool art::interpreter::DoCall<false, 
false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction 
const*, unsigned short, art::JValue*) 0x00000000e4243bbf void 
art::interpreter::ExecuteSwitchImplCpp<false, 
false>(art::interpreter::SwitchImplContext*) 0x00000000e4017fcf 
ExecuteSwitchImplAsm 0x00000000e400bf63 
art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, 
art::ShadowFrame&, art::JValue, bool, bool) (.llvm.10914192770458939989) 
0x00000000e4238e02 
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, 
art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) 
0x00000000e4242da0 bool art::interpreter::DoCall<false, 
false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction 
const*, unsigned short, art::JValue*) 0x00000000e4243ba1 void 
art::interpreter::ExecuteSwitchImplCpp<false, 
false>(art::interpreter::SwitchImplContext*) 0x00000000e4017d01 
ExecuteSwitchImplAsm 0x00000000e400bf63 
art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, 
art::ShadowFrame&, art::JValue, bool, bool) (.llvm.10914192770458939989) 
0x00000000e4238e02 
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, 
art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) 
0x00000000e4242da0 bool art::interpreter::DoCall<false, 
false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction 
const*, unsigned short, art::JValue*) 0x00000000e4243ba1 void 
art::interpreter::ExecuteSwitchImplCpp<false, 
false>(art::interpreter::SwitchImplContext*) 0x00000000e4016381 
ExecuteSwitchImplAsm 0x00000000e400bf63 
art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, 
art::ShadowFrame&, art::JValue, bool, bool) (.llvm.10914192770458939989) 
0x00000000e4238e02 
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, 
art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) 
0x00000000e4242da0 bool art::interpreter::DoCall<false, 
false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction 
const*, unsigned short, art::JValue*) 0x00000000e4243ba1 void 
art::interpreter::ExecuteSwitchImplCpp<false, 
false>(art::interpreter::SwitchImplContext*) 0x00000000e4017fcf 
ExecuteSwitchImplAsm 0x00000000e400bf63 
art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, 
art::ShadowFrame&, art::JValue, bool, bool) (.llvm.10914192770458939989) 
0x00000000e4238e02 
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, 
art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) 
0x00000000e4242da0 bool art::interpreter::DoCall<false, 
true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction 
const*, unsigned short, art::JValue*) 0x00000000e4244636 void 
art::interpreter::ExecuteSwitchImplCpp<true, 
false>(art::interpreter::SwitchImplContext*) 0x00000000e4057794 
ExecuteSwitchImplAsm 0x00000000e400bf63 
art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, 
art::ShadowFrame&, art::JValue, bool, bool) (.llvm.10914192770458939989) 
0x00000000e4238c0f 
art::interpreter::EnterInterpreterFromEntryPoint(art::Thread*, 
art::CodeItemDataAccessor const&, art::ShadowFrame*) 0x00000000e4242c81 
artQuickToInterpreterBridge 0x00000000e4656186 
art_quick_to_interpreter_bridge 0x00000000e400b38e <unknown> 
0x00000000e400b530

As Eduardo mentioned, any hints or insights would be very appreciated!

Thanks,
Igor

On Monday, 21 February 2022 at 22:33:22 UTC+1 Eduardo Speroni wrote:

> Hello!
>
> We're trying to upgrade the v8 runtime to 9.7 in NativeScript but ran into 
> this issue when implementing the code for enabling the inspector console.
>
> We receive the message and call v8::debug::EvaluateGlobal with 
> kDisableBreaksAndThrowOnSideEffect:
>
>
> https://github.com/NativeScript/android-runtime/blob/3a8316d47f965730ca9edeec8bed733a2636c6d9/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/v8-runtime-agent-impl.cc#L279-L289
>
> After that the thread hangs. Pausing the app shows the following stack 
> trace:
>
> syscall 0x00000073f171d35c __futex_wait_ex(void volatile*, bool, int, 
> bool, timespec const*) 0x00000073f1721984 pthread_cond_wait 
> 0x00000073f1781b90 
> v8::internal::OptimizingCompileDispatcher::FlushQueues(v8::internal::BlockingBehavior,
>  
> bool) 0x00000070cd85c348 
> v8::internal::OptimizingCompileDispatcher::Flush(v8::internal::BlockingBehavior)
>  
> 0x00000070cd85c3b4 
> v8::internal::Debug::DeoptimizeFunction(v8::internal::Handle<v8::internal::SharedFunctionInfo>)
>  
> 0x00000070cd576324 v8::internal::Runtime_DebugOnFunctionCall(int, unsigned 
> long*, v8::internal::Isolate*) 0x00000070cd8f8b98 
> Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit 
> 0x00000070cdb6856c Builtins_CallFunction_ReceiverIsAny 0x00000070cdae25ec 
> Builtins_JSEntryTrampoline 0x00000070cdaebacc Builtins_JSEntry 
> 0x00000070cdaeb768 v8::internal::(anonymous 
> namespace)::Invoke(v8::internal::Isolate*, v8::internal::(anonymous 
> namespace)::InvokeParams const&) 0x00000070cd60b6d4 
> v8::internal::Execution::CallScript(v8::internal::Isolate*, 
> v8::internal::Handle<v8::internal::JSFunction>, 
> v8::internal::Handle<v8::internal::Object>, 
> v8::internal::Handle<v8::internal::FixedArray>) 0x00000070cd60b9d4 
> v8::internal::DebugEvaluate::Global(v8::internal::Isolate*, 
> v8::internal::Handle<v8::internal::JSFunction>, 
> v8::debug::EvaluateGlobalMode, v8::internal::REPLMode) 0x00000070cd56926c 
> v8::internal::DebugEvaluate::Global(v8::internal::Isolate*, 
> v8::internal::Handle<v8::internal::String>, v8::debug::EvaluateGlobalMode, 
> v8::internal::REPLMode) 0x00000070cd569080 
> v8::debug::EvaluateGlobal(v8::Isolate*, v8::Local<v8::String>, 
> v8::debug::EvaluateGlobalMode, bool) 0x00000070cd566580 
> v8_inspector::V8RuntimeAgentImpl::evaluate(v8_inspector::String16 const&, 
> v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, 
> v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, 
> v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<bool>, 
> v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, 
> v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, 
> v8_crdtp::detail::ValueMaybe<double>, v8_crdtp::detail::ValueMaybe<bool>, 
> v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, 
> v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, 
> std::__Cr::unique_ptr<v8_inspector::protocol::Runtime::Backend::EvaluateCallback,
>  
> std::__Cr::default_delete<v8_inspector::protocol::Runtime::Backend::EvaluateCallback>
>  
> >) v8-runtime-agent-impl.cc:309 
> v8_inspector::protocol::Runtime::DomainDispatcherImpl::evaluate(v8_crdtp::Dispatchable
>  
> const&) Runtime.cpp:961 
> v8_inspector::protocol::Runtime::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
>  
> char>)::$_69::operator()(v8_crdtp::Dispatchable const&) const 
> Runtime.cpp:635 
> decltype(std::__Cr::forward<v8_inspector::protocol::Runtime::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
>  
> char>)::$_69&>(fp)(std::__Cr::forward<v8_crdtp::Dispatchable const&>(fp0))) 
> std::__Cr::__invoke<v8_inspector::protocol::Runtime::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
>  
> char>)::$_69&, v8_crdtp::Dispatchable 
> const&>(v8_inspector::protocol::Runtime::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
>  
> char>)::$_69&, v8_crdtp::Dispatchable const&) type_traits:3694 void 
> std::__Cr::__invoke_void_return_wrapper<void, 
> true>::__call<v8_inspector::protocol::Runtime::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
>  
> char>)::$_69&, v8_crdtp::Dispatchable 
> const&>(v8_inspector::protocol::Runtime::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
>  
> char>)::$_69&, v8_crdtp::Dispatchable const&) __functional_base:348 
> std::__Cr::__function::__default_alloc_func<v8_inspector::protocol::Runtime::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
>  
> char>)::$_69, void (v8_crdtp::Dispatchable 
> const&)>::operator()(v8_crdtp::Dispatchable const&) functional:1611 void 
> std::__Cr::__function::__policy_invoker<void (v8_crdtp::Dispatchable 
> const&)>::__call_impl<std::__Cr::__function::__default_alloc_func<v8_inspector::protocol::Runtime::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned
>  
> char>)::$_69, void (v8_crdtp::Dispatchable const&)> 
> >(std::__Cr::__function::__policy_storage const*, v8_crdtp::Dispatchable 
> const&) functional:2092 v8_crdtp::UberDispatcher::DispatchResult::Run() 
> 0x00000070cd1e2954 
> v8_inspector::V8InspectorSessionImpl::dispatchProtocolMessage(v8_inspector::StringView)
>  
> v8-inspector-session-impl.cc:454 
> tns::JsV8InspectorClient::doDispatchMessage(v8::Isolate*, 
> std::__Cr::basic_string<char, std::__Cr::char_traits<char>, 
> std::__Cr::allocator<char> > const&) JsV8InspectorClient.cpp:131 
> tns::JsV8InspectorClient::dispatchMessage(std::__Cr::basic_string<char, 
> std::__Cr::char_traits<char>, std::__Cr::allocator<char> > const&) 
> JsV8InspectorClient.cpp:89 
> ::Java_com_tns_AndroidJsV8Inspector_dispatchMessage(JNIEnv *, jobject, 
> jstring) com_tns_AndroidJsV8Inspector.cpp:29 
> art_quick_generic_jni_trampoline 0x00000071422d9a48 art_quick_invoke_stub 
> 0x00000071422d0168 
> art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, 
> art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*) 
> 0x00000071422f47c8 bool art::interpreter::DoCall<false, 
> false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction 
> const*, unsigned short, art::JValue*) 0x0000007142417a20 void 
> art::interpreter::ExecuteSwitchImplCpp<false, 
> false>(art::interpreter::SwitchImplContext*) 0x000000714221660c 
> ExecuteSwitchImplAsm 0x00000071422dc3dc 
> art::interpreter::ExecuteSwitch(art::Thread*, art::CodeItemDataAccessor 
> const&, art::ShadowFrame&, art::JValue, bool) (.llvm.6649268296134209133) 
> 0x0000007142545d58 art::interpreter::Execute(art::Thread*, 
> art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, 
> bool) (.llvm.6649268296134209133) 0x000000714227e2f0 
> art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, 
> art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) 
> 0x00000071423851d4 bool art::interpreter::DoCall<false, 
> false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction 
> const*, unsigned short, art::JValue*) 0x0000007142417c98 void 
> art::interpreter::ExecuteSwitchImplCpp<false, 
> false>(art::interpreter::SwitchImplContext*) 0x00000071422166a0 
> ExecuteSwitchImplAsm 0x00000071422dc3dc 
> art::interpreter::ExecuteSwitch(art::Thread*, art::CodeItemDataAccessor 
> const&, art::ShadowFrame&, art::JValue, bool) (.llvm.6649268296134209133) 
> 0x0000007142545d58 art::interpreter::Execute(art::Thread*, 
> art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, 
> bool) (.llvm.6649268296134209133) 0x000000714227e2f0 
> art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, 
> art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) 
> 0x00000071423851d4 bool art::interpreter::DoCall<false, 
> false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction 
> const*, unsigned short, art::JValue*) 0x0000007142417c98 void 
> art::interpreter::ExecuteSwitchImplCpp<false, 
> false>(art::interpreter::SwitchImplContext*) 0x0000007142210704 
> ExecuteSwitchImplAsm 0x00000071422dc3dc 
> art::interpreter::ExecuteSwitch(art::Thread*, art::CodeItemDataAccessor 
> const&, art::ShadowFrame&, art::JValue, bool) (.llvm.6649268296134209133) 
> 0x0000007142545d58 art::interpreter::Execute(art::Thread*, 
> art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, 
> bool) (.llvm.6649268296134209133) 0x000000714227e2f0 
> art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, 
> art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) 
> 0x00000071423851d4 bool art::interpreter::DoCall<false, 
> false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction 
> const*, unsigned short, art::JValue*) 0x0000007142417c98 void 
> art::interpreter::ExecuteSwitchImplCpp<false, 
> false>(art::interpreter::SwitchImplContext*) 0x000000714221660c 
> ExecuteSwitchImplAsm 0x00000071422dc3dc 
> art::interpreter::ExecuteSwitch(art::Thread*, art::CodeItemDataAccessor 
> const&, art::ShadowFrame&, art::JValue, bool) (.llvm.6649268296134209133) 
> 0x0000007142545d58 art::interpreter::Execute(art::Thread*, 
> art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, 
> bool) (.llvm.6649268296134209133) 0x000000714227e2f0 
> art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, 
> art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) 
> 0x00000071423851d4 bool art::interpreter::DoCall<false, 
> false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction 
> const*, unsigned short, art::JValue*) 0x0000007142417c98 void 
> art::interpreter::ExecuteSwitchImplCpp<false, 
> false>(art::interpreter::SwitchImplContext*) 0x0000007142210704 
> ExecuteSwitchImplAsm 0x00000071422dc3dc MterpInvokeStatic 
> 0x0000007142775dc0 mterp_op_invoke_static 0x00000071422caa18 
> art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, 
> art::ShadowFrame&, art::JValue, bool, bool) (.llvm.6649268296134209133) 
> 0x000000714227dd78 artQuickToInterpreterBridge 0x000000714227cf20 
> art_quick_to_interpreter_bridge 0x00000071422d9b7c <unknown> 
> 0x00000071422d9d90
>
>
>
> I believe the code is hanging on this line exactly:
>
>
> https://github.com/v8/v8/blob/2257f6b14584c191e601cd10ccf3925540f2e492/src/compiler-dispatcher/optimizing-compile-dispatcher.cc#L179
>
> but I can't find out why. Checking the other threads it doesn't seem there 
> are any v8 calls hanging. If we switch to kDisableBreaks or kDefault then 
> the app doesn't hang anymore, but the behavior still isn't correct.
>
> Any insight would be greatly appreciated! Thanks
>

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-users/64391392-e134-4b57-9bd8-b1b7c41f8a5dn%40googlegroups.com.

Reply via email to