> On 6 Mar 2018, at 14:17, Stephan Bergmann <sberg...@redhat.com> wrote: > > On 06.03.2018 11:38, Jan Iversen wrote: >> At some point a piece of code (in the same executable) decides to make a uno >> call, this looks like >> Cpp2uno_call() -> >> raise_exception() >> __cxa_throw() -> >> ( C++ throw handling) -> >> getCaughtException() -> >> UnoInterfaceProxyDispatch() -> >> cpp_call() -> >> CallVirtualMethod() -> >> ( Call requested >> function ) > > Hard to tell what you're actually looking at without seeing a real backtrace > (e.g., I have no idea what "Cpp2uno_call()" is supposed to mean).
No problem, I just tried to limit the mail size :-) cpp2uno_call is a function implemented in bridges/source/cppuno/gcc* Backtrace: (lldb) bt * thread #10, name = 'LOKitThread.queue', stop reason = breakpoint 14.1 * frame #0: 0x000000010cb6b416 libKit.dylib`gcc3::callVirtualMethod(pThis=0x00000001173b0f20, nVtableIndex=4, pRegisterReturn=0x0000000000000000, pReturnTypeRef=0x0000608000098830, bSimpleReturn=true, pStack=0x0000700002a04dd0, nStack=0, pGPR=0x0000700002a050e0, pFPR=0x0000700002a050a0) at callvirtualmethod.cxx:73 frame #1: 0x000000010cb6a48f libKit.dylib`cpp_call(pThis=0x0000604000e76c40, aVtableSlot=(offset = 0, index = 4), pReturnTypeRef=0x0000608000098830, nParams=0, pParams=0x0000000000000000, pUnoReturn=0x0000000000000000, pUnoArgs=0x0000000000000000, ppUnoExc=0x0000700002a053f0) at uno2cpp.cxx:233 frame #2: 0x000000010cb69bee libKit.dylib`unoInterfaceProxyDispatch(pUnoI=0x0000604000e76c40, pMemberDescr=0x000060c00015bcd0, pReturn=0x0000000000000000, pArgs=0x0000000000000000, ppException=0x0000700002a053f0) at uno2cpp.cxx:418 frame #3: 0x00000001133528cd libKit.dylib`com::sun::star::uno::UnoInterfaceReference::dispatch(this=0x0000700002a05418, pMemberType=0x000060c00015bcd0, pReturn=0x0000000000000000, pArgs=0x0000000000000000, ppException=0x0000700002a053f0) const at dispatcher.hxx:173 frame #4: 0x0000000113352558 libKit.dylib`cppu::getCaughtException() at exc_thrower.cxx:238 frame #5: 0x000000011371d85f libKit.dylib`utl::UCBContentHelper::IsDocument(url=0x0000700002a059e0) at ucbhelper.cxx:150 frame #6: 0x000000010c83d005 libKit.dylib`FSStorageFactory::createInstanceWithArguments(this=0x0000600001a6b300, aArguments=0x0000700002a05b40) at fsfactory.cxx:128 frame #7: 0x000000010c83d883 libKit.dylib`non-virtual thunk to FSStorageFactory::createInstanceWithArguments(this=0x0000600001a6b300, aArguments=0x0000700002a05b40) at fsfactory.cxx:0 frame #8: 0x000000010c917d91 libKit.dylib`framework::PresetHandler::getOrCreateRootStorageShare(this=0x00006000001f2500) at presethandler.cxx:226 frame #9: 0x000000010c918d52 libKit.dylib`framework::PresetHandler::connectToResource(this=0x00006000001f2500, eConfigType=E_MODULES, sResource=0x0000700002a06740, sModule=0x00007fb0704781a0, xDocumentRoot=0x0000700002a06738, rLanguageTag=0x0000700002a067a0) at presethandler.cxx:349 frame #10: 0x000000010cab7a6c libKit.dylib`(anonymous namespace)::ModuleUIConfigurationManager::ModuleUIConfigurationManager(this=0x00007fb0704780a0, xContext=0x0000700002a06890, aArguments=0x0000700002a06de0) at moduleuiconfigurationmanager.cxx:888 frame #11: 0x000000010cab6dd5 libKit.dylib`(anonymous namespace)::ModuleUIConfigurationManager::ModuleUIConfigurationManager(this=0x00007fb0704780a0, xContext=0x0000700002a06890, aArguments=0x0000700002a06de0) at moduleuiconfigurationmanager.cxx:855 frame #12: 0x000000010cab6cba libKit.dylib`::com_sun_star_comp_framework_ModuleUIConfigurationManager_get_implementation(context=0x000060800012af00, arguments=0x0000700002a06de0) at moduleuiconfigurationmanager.cxx:1676 frame #13: 0x00000001133c55a0 libKit.dylib`com::sun::star::uno::XInterface* std::__1::__invoke_void_return_wrapper<com::sun::star::uno::XInterface*>::__call<com::sun::star::uno::XInterface* (*&)(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&>(com::sun::star::uno::XInterface* (*&&&)(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), com::sun::star::uno::XComponentContext*&&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&&&) [inlined] decltype(__f=0x00006000000f6998, __args=0x0000700002a069c0, __args=0x0000700002a06de0)(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&)>(fp)(std::__1::forward<com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&>(fp0))) std::__1::__invoke<com::sun::star::uno::XInterface* (*&)(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&>(com::sun::star::uno::XInterface* (*&&&)(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), com::sun::star::uno::XComponentContext*&&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&&&) at type_traits:4291 frame #14: 0x00000001133c5574 libKit.dylib`com::sun::star::uno::XInterface* std::__1::__invoke_void_return_wrapper<com::sun::star::uno::XInterface*>::__call<com::sun::star::uno::XInterface* (__args=0x00006000000f6998, __args=0x0000700002a069c0, __args=0x0000700002a06de0)(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&>(com::sun::star::uno::XInterface* (*&&&)(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), com::sun::star::uno::XComponentContext*&&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&&&) at __functional_base:328 frame #15: 0x00000001133c5429 libKit.dylib`std::__1::__function::__func<com::sun::star::uno::XInterface* (*)(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), std::__1::allocator<com::sun::star::uno::XInterface* (*)(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&)>, com::sun::star::uno::XInterface* (com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&)>::operator(this=0x00006000000f6990, __arg=0x0000700002a069c0, __arg=0x0000700002a06de0)(com::sun::star::uno::XComponentContext*&&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&) at functional:1552 frame #16: 0x0000000113388a8f libKit.dylib`std::__1::function<com::sun::star::uno::XInterface* (com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&)>::operator(this=0x00006000000f6990, __arg=0x000060800012af00, __arg=0x0000700002a06de0)(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&) const at functional:1903 frame #17: 0x0000000113388d18 libKit.dylib`cppuhelper::ServiceManager::Data::Implementation::createInstanceWithArguments(this=0x00006000000f6980, context=0x0000600000136898, singletonRequest=false, arguments=0x0000700002a06de0) at servicemanager.cxx:683 frame #18: 0x0000000113392794 libKit.dylib`cppuhelper::ServiceManager::createInstanceWithArgumentsAndContext(this=0x00007fb070600110, ServiceSpecifier=0x0000700002a06dc0, Arguments=0x0000700002a06de0, Context=0x0000600000136898) at servicemanager.cxx:1004 frame #19: 0x0000000113392833 libKit.dylib`non-virtual thunk to cppuhelper::ServiceManager::createInstanceWithArgumentsAndContext(this=0x00007fb070600110, ServiceSpecifier=0x0000700002a06dc0, Arguments=0x0000700002a06de0, Context=0x0000600000136898) at servicemanager.cxx:0 frame #20: 0x000000010cab547b libKit.dylib`com::sun::star::ui::ModuleUIConfigurationManager::createDefault(the_context=0x0000600000136898, ModuleShortName=0x0000700002a07080, ModuleIdentifier=0x0000700002a07398) at ModuleUIConfigurationManager.hpp:50 frame #21: 0x000000010cab2818 libKit.dylib`(anonymous namespace)::ModuleUIConfigurationManagerSupplier::getUIConfigurationManager(this=0x0000600000136800, sModuleIdentifier=0x0000700002a07398) at moduleuicfgsupplier.cxx:176 frame #22: 0x000000010cab2df3 libKit.dylib`non-virtual thunk to (anonymous namespace)::ModuleUIConfigurationManagerSupplier::getUIConfigurationManager(this=0x0000600000136800, sModuleIdentifier=0x0000700002a07398) at moduleuicfgsupplier.cxx:0 frame #23: 0x000000010c985574 libKit.dylib`framework::LayoutManager::implts_reset(this=0x00007fb0705673a0, bAttached=true) at layoutmanager.cxx:286 frame #24: 0x000000010c998c2a libKit.dylib`framework::LayoutManager::frameAction(this=0x00007fb0705673a0, aEvent=0x0000700002a07768) at layoutmanager.cxx:2700 frame #25: 0x000000010c998e0c libKit.dylib`non-virtual thunk to framework::LayoutManager::frameAction(this=0x00007fb0705673a0, aEvent=0x0000700002a07768) at layoutmanager.cxx:0 frame #26: 0x000000010ca48d72 libKit.dylib`(anonymous namespace)::Frame::implts_sendFrameActionEvent(this=0x00007fb0705632e0, aAction=0x00000001157a3834) at frame.cxx:2942 frame #27: 0x000000010ca3b44b libKit.dylib`(anonymous namespace)::Frame::setComponent(this=0x00007fb0705632e0, xComponentWindow=0x0000700002a07b30, xController=0x0000700002a07b28) at frame.cxx:1536 frame #28: 0x000000010ca418c4 libKit.dylib`non-virtual thunk to (anonymous namespace)::Frame::setComponent(this=0x00007fb0705632e0, xComponentWindow=0x0000700002a07b30, xController=0x0000700002a07b28) at frame.cxx:0 frame #29: 0x00000001103efdbd libKit.dylib`(anonymous namespace)::SfxFrameLoader_Impl::impl_createDocumentView(i_rModel=0x0000700002a07e88, i_rFrame=0x0000700002a082d8, i_rViewFactoryArgs=0x0000700002a07e50, i_rViewName=0x0000700002a07da0) at frmload.cxx:592 frame #30: 0x00000001103ec7a6 libKit.dylib`(anonymous namespace)::SfxFrameLoader_Impl::load(this=0x000060c000a71880, rArgs=0x0000700002a08258, _rTargetFrame=0x0000700002a082d8) at frmload.cxx:710 frame #31: 0x00000001103ecc74 libKit.dylib`non-virtual thunk to (anonymous namespace)::SfxFrameLoader_Impl::load(this=0x000060c000a71880, rArgs=0x0000700002a08258, _rTargetFrame=0x0000700002a082d8) at frmload.cxx:0 frame #32: 0x000000010c9df2ab libKit.dylib`framework::LoadEnv::impl_loadContent(this=0x0000700002a089c8) at loadenv.cxx:1107 frame #33: 0x000000010c9d92cc libKit.dylib`framework::LoadEnv::startLoading(this=0x0000700002a089c8) at loadenv.cxx:375 frame #34: 0x000000010c9d7864 libKit.dylib`framework::LoadEnv::loadComponentFromURL(xLoader=0x0000700002a08b40, xContext=0x00007fb07300b5e0, sURL=0x0000700002a09308, sTarget=0x0000700002a091f8, nFlags=0, lArgs=0x0000700002a09280) at loadenv.cxx:161 frame #35: 0x000000010ca2a2c1 libKit.dylib`framework::Desktop::loadComponentFromURL(this=0x00007fb07300b4c0, sURL=0x0000700002a09308, sTargetFrameName=0x0000700002a091f8, nSearchFlags=0, lArguments=0x0000700002a09280) at desktop.cxx:618 frame #36: 0x000000010ca2a3cb libKit.dylib`non-virtual thunk to framework::Desktop::loadComponentFromURL(this=0x00007fb07300b4c0, sURL=0x0000700002a09308, sTargetFrameName=0x0000700002a091f8, nSearchFlags=0, lArguments=0x0000700002a09280) at desktop.cxx:0 frame #37: 0x000000011064fdeb libKit.dylib`lo_documentLoadWithOptions(pThis=0x00006040000aae00, pURL="file:///Users/jani/Library/Developer/CoreSimulator/Devices/4088A840-32A5-4B26-9225-FF6BFE3DF964/data/Containers/Bundle/Application/FB15EB6A-81ED-41CF-BC95-A6568BCE9AE1/LibreOfficeLight.app/welcome.odt", pOptions=0x0000000000000000) at init.cxx:1361 frame #38: 0x000000011064f091 libKit.dylib`lo_documentLoad(pThis=0x00006040000aae00, pURL="file:///Users/jani/Library/Developer/CoreSimulator/Devices/4088A840-32A5-4B26-9225-FF6BFE3DF964/data/Containers/Bundle/Application/FB15EB6A-81ED-41CF-BC95-A6568BCE9AE1/LibreOfficeLight.app/welcome.odt") at init.cxx:1279 frame #39: 0x0000000101440321 LibreOfficeLight`LibreOffice.documentLoad(url="file:///Users/jani/Library/Developer/CoreSimulator/Devices/4088A840-32A5-4B26-9225-FF6BFE3DF964/data/Containers/Bundle/Application/FB15EB6A-81ED-41CF-BC95-A6568BCE9AE1/LibreOfficeLight.app/welcome.odt", self=0x00006000000e7b00) at LibreOfficeKitWrapper.swift:117 frame #40: 0x000000010145645f LibreOfficeLight`closure #1 in LOKitThread.documentLoad(lo=0x00006000000e7b00, url="file:///Users/jani/Library/Developer/CoreSimulator/Devices/4088A840-32A5-4B26-9225-FF6BFE3DF964/data/Containers/Bundle/Application/FB15EB6A-81ED-41CF-BC95-A6568BCE9AE1/LibreOfficeLight.app/welcome.odt", callback=0x000000010144ef90 LibreOfficeLight`partial apply forwarder for closure #1 (Swift.Optional<LibreOfficeLight.DocumentHolder>, Swift.Optional<Swift.Error>) -> () in LibreOfficeLight.DocumentController.doOpen(Foundation.URL) -> () at DocumentController.swift) at LOKitThread.swift:106 frame #41: 0x0000000101456ac2 LibreOfficeLight`partial apply for closure #1 in LOKitThread.documentLoad(url:callback:) at LOKitThread.swift:0 frame #42: 0x00000001014561fa LibreOfficeLight`closure #1 in LOKitThread.withLibreOffice(closure=0x0000000101456a50 LibreOfficeLight`partial apply forwarder for closure #1 (LibreOfficeLight.LibreOffice) -> () in LibreOfficeLight.LOKitThread.documentLoad(url: Swift.String, callback: (Swift.Optional<LibreOfficeLight.DocumentHolder>, Swift.Optional<Swift.Error>) -> ()) -> () at LOKitThread.swift, self=0x000060c00007bec0) at LOKitThread.swift:90 frame #43: 0x00000001014562af LibreOfficeLight`partial apply for closure #1 in LOKitThread.withLibreOffice(_:) at LOKitThread.swift:0 frame #44: 0x00000001014677bc LibreOfficeLight`closure #1 in SingleThreadedQueue.async(runnable=0x0000000101456260 LibreOfficeLight`partial apply forwarder for closure #1 () -> () in LibreOfficeLight.LOKitThread.withLibreOffice((LibreOfficeLight.LibreOffice) -> ()) -> () at LOKitThread.swift) at AsyncUtil.swift:62 frame #45: 0x000000010146784a LibreOfficeLight`partial apply for closure #1 in SingleThreadedQueue.async(_:) at AsyncUtil.swift:0 frame #46: 0x00000001014466b9 LibreOfficeLight`thunk for @callee_owned () -> () at DocumentActions.swift:0 frame #47: 0x00000001017ff22f Foundation`__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 7 frame #48: 0x00000001017ff091 Foundation`-[NSBlockOperation main] + 68 frame #49: 0x00000001017fd54e Foundation`-[__NSOperationInternal _start:] + 778 frame #50: 0x000000010182a1e8 Foundation`__NSThreadPerformPerform + 334 frame #51: 0x00000001026fa101 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 frame #52: 0x0000000102799f71 CoreFoundation`__CFRunLoopDoSource0 + 81 frame #53: 0x00000001026dea19 CoreFoundation`__CFRunLoopDoSources0 + 185 frame #54: 0x00000001026ddfff CoreFoundation`__CFRunLoopRun + 1279 frame #55: 0x00000001026dd889 CoreFoundation`CFRunLoopRunSpecific + 409 frame #56: 0x00000001017e46de Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 274 frame #57: 0x00000001017e45b9 Foundation`-[NSRunLoop(NSRunLoop) run] + 76 frame #58: 0x000000010146746b LibreOfficeLight`SingleThreadedQueue.main(self=0x00006080004735c0) at AsyncUtil.swift:55 frame #59: 0x00000001014675a4 LibreOfficeLight`@objc SingleThreadedQueue.main() at AsyncUtil.swift:0 frame #60: 0x00000001017f212c Foundation`__NSThread__start__ + 1197 frame #61: 0x0000000106ef86c1 libsystem_pthread.dylib`_pthread_body + 340 frame #62: 0x0000000106ef856d libsystem_pthread.dylib`_pthread_start + 377 frame #63: 0x0000000106ef7c5d libsystem_pthread.dylib`thread_start + 13 (lldb) This backtrace is on a Mac, compiled as MAC but with libraries that allow it to run in the iOS simulator. This is from loading a document. > > As there is "getCaughtException()" in your picture: cppu::getCaughtException > (cppuhelper/exc_hlp.hxx) internally uses the bridge between C++ and binary > UNO to translate the C++ exception being caught by the current catch block > into a css::uno::Any. You need that bridge in all its glory, beautiful > assembler hackery and all, for that functionality to work. That is for sure an argument, I forgot that using throw is a “modern” way of the old longjump(), allowing you not scroll back in the call stack. > >> Because on iOS, no external process will ever call the UNO interface, it is >> 1 single executable (I also removed the pipes etc). > > Just to be clear: The bridge between C++ and binary UNO is used in more > scenarios than just inter-process communication. Other examples are bridging > to code in other languages like Java, the thread-affine bridge used by some > (Java) database code, or cppu::getCaughtException mentioned above. While the > former examples may not be relevant on iOS, the latter one certainly is. I can see now that the throw/catch mechanism needs to stay, but in iOS we do not use java or python, so there are no real need to convert everything to uno standard just to convert it back again. Thanks for the answer. rgds Jan I.
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice