小小吐槽一下Tauri吧

提前声明,Tauri确实是一个很好的框架,不用像Electron一样绑定一个chromium进去,rust的后端性能也很好,安全性也有保证,用着确实很爽
以下是一点小小的吐槽

  1. 文档不直观,官方给的示例很少,特别是插件,基本就是一个示例代码就没了,前面的区域以后再来探索吧
  2. 有一些疑难杂症,网上都找不到解决方案,或者说根本没人遇到过,比如deep-link插件注册有很多文档没提到的坑,如果你的main函数开头有一些初始化代码,不是直接tauri::Builder::default()然后第一个注册single instance插件,就可能出现自定义url注册不了的问题,网上一点资料都找不到 :melting_face:,最后只能去发issue问问。不过tauri作者很热心,回复也很快,必须好评。还有许许多多的坑,一踩一个不吱声

以及我最近遇到的一个随机崩溃的bug,也是根本找不到任何信息,L站有没有大佬研究过的来帮帮我 :sob:
以下是panic_hook抓的栈帧

Panic Message: assertion failed: flush_paint_messages(None, &subclass_input.event_loop_runner)
Location: D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop.rs:2345:11
Backtrace:
   0: std::backtrace_rs::backtrace::win64::trace
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\..\..\backtrace\src\backtrace\win64.rs:85
   1: std::backtrace_rs::backtrace::trace_unsynchronized
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66
   2: std::backtrace::Backtrace::create
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\backtrace.rs:331
   3: std::backtrace::Backtrace::force_capture
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\backtrace.rs:312
   4: aiverything::setup_panic_hook::closure$0
             at .\src\main.rs:627
   5: std::panicking::rust_panic_with_hook
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\panicking.rs:841
   6: std::panicking::begin_panic_handler::closure$0
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\panicking.rs:699
   7: std::sys::backtrace::__rust_end_short_backtrace<std::panicking::begin_panic_handler::closure_env$0,never$>
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\sys\backtrace.rs:168
   8: std::panicking::begin_panic_handler
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\panicking.rs:697
   9: core::panicking::panic_fmt
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\core\src\panicking.rs:75
  10: core::panicking::panic
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\core\src\panicking.rs:145
  11: tao::platform_impl::platform::event_loop::thread_event_target_callback::closure$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop.rs:2345
  12: core::ops::function::FnOnce::call_once<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >,tuple$<> >
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\ops\function.rs:250
  13: core::panic::unwind_safe::impl$25::call_once<windows::Win32::Foundation::LRESULT,tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\panic\unwind_safe.rs:272
  14: std::panicking::catch_unwind::do_call<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,windows::Win32:
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\panicking.rs:589
  15: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<tokio::runtime::task::harness::poll_future::closure_env$0<enum2$<tauri_plugin_shell::commands::spawn::async_block_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > > >,alloc::
  16: std::panicking::catch_unwind
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\panicking.rs:552
  17: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,windows::Win32::Foundation::
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\panic.rs:359
  18: tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::catch_unwind<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,windows::Win32::Foundation::LRESUL
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop\runner.rs:156
  19: tao::platform_impl::platform::event_loop::thread_event_target_callback<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop.rs:2436
  20: DefSubclassProc
  21: GetWindowSubclass
  22: CallWindowProcW
  23: SendMessageW
  24: GetWindowDpiAwarenessContext
  25: KiUserCallbackDispatcher
  26: NtUserDispatchMessage
  27: IsWindowUnicode
  28: tray_icon::platform_impl::platform::tray_proc
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tray-icon-0.21.1\src\platform_impl\windows\mod.rs:317
  29: CallWindowProcW
  30: CallWindowProcW
  31: DefSubclassProc
  32: DefSubclassProc
  33: muda::platform_impl::platform::menu_subclass_proc
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\muda-0.17.1\src\platform_impl\windows\mod.rs:1178
  34: DefSubclassProc
  35: GetWindowSubclass
  36: CallWindowProcW
  37: SendMessageW
  38: User32InitializeImmEntryTable
  39: KiUserCallbackDispatcher
  40: NtUserPeekMessage
  41: PeekMessageW
  42: PeekMessageW
  43: windows::Win32::UI::WindowsAndMessaging::PeekMessageW
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\windows-0.61.3\src\Windows\Win32\UI\WindowsAndMessaging\mod.rs:1844
  44: tao::platform_impl::platform::event_loop::flush_paint_messages::closure$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop.rs:822
  45: tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::owned_windows<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tao::platform_impl::platform::eve
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop\runner.rs:194
  46: tao::platform_impl::platform::event_loop::flush_paint_messages<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop.rs:817
  47: tao::platform_impl::platform::event_loop::thread_event_target_callback::closure$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop.rs:2345
  48: core::ops::function::FnOnce::call_once<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >,tuple$<> >
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\ops\function.rs:250
  49: core::panic::unwind_safe::impl$25::call_once<windows::Win32::Foundation::LRESULT,tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\panic\unwind_safe.rs:272
  50: std::panicking::catch_unwind::do_call<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,windows::Win32:
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\panicking.rs:589
  51: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<tokio::runtime::task::harness::poll_future::closure_env$0<enum2$<tauri_plugin_shell::commands::spawn::async_block_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > > >,alloc::
  52: std::panicking::catch_unwind
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\panicking.rs:552
  53: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::thread_event_target_callback::closure_env$0<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > > >,windows::Win32::Foundation::
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\panic.rs:359
  54: tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::catch_unwind<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,windows::Win32::Foundation::LRESUL
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop\runner.rs:156
  55: tao::platform_impl::platform::event_loop::thread_event_target_callback<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop.rs:2436
  56: DefSubclassProc
  57: GetWindowSubclass
  58: CallWindowProcW
  59: SendMessageW
  60: GetWindowDpiAwarenessContext
  61: KiUserCallbackDispatcher
  62: NtUserDispatchMessage
  63: IsWindowUnicode
  64: windows::Win32::UI::WindowsAndMessaging::DispatchMessageW
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\windows-0.61.3\src\Windows\Win32\UI\WindowsAndMessaging\mod.rs:577
  65: tao::platform_impl::platform::event_loop::EventLoop<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::run_return<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::make_event_handler::closure_env
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop.rs:259
  66: tao::platform_impl::platform::event_loop::EventLoop<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::run<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::make_event_handler::closure_env$0<enum
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\platform_impl\windows\event_loop.rs:221
  67: tao::event_loop::EventLoop<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > > >::run<enum2$<tauri_runtime_wry::Message<enum2$<tauri::EventLoopMessage> > >,tauri_runtime_wry::make_event_handler::closure_env$0<enum2$<tauri::EventLoopMessag
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tao-0.34.0\src\event_loop.rs:215
  68: tauri_runtime_wry::impl$45::run<enum2$<tauri::EventLoopMessage>,tauri::app::impl$16::make_run_event_loop_callback::closure_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> >,tauri::app::impl$19::run::closure_env$0<tauri_runtime_wry::Wry<enum2$<
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tauri-runtime-wry-2.7.2\src\lib.rs:3019
  69: tauri::app::App<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > >::run<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> >,tauri::app::impl$19::run::closure_env$0<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > > >
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tauri-2.7.0\src\app.rs:1238
  70: tauri::app::Builder<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > >::run<tauri_runtime_wry::Wry<enum2$<tauri::EventLoopMessage> > >
             at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tauri-2.7.0\src\app.rs:2289
  71: aiverything::main
             at .\src\main.rs:243
  72: core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\ops\function.rs:250
  73: core::hint::black_box
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\hint.rs:482
  74: std::sys::backtrace::__rust_begin_short_backtrace<void (*)(),tuple$<> >
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\sys\backtrace.rs:152
  75: std::rt::lang_start::closure$0<tuple$<> >
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\rt.rs:206
  76: std::rt::lang_start_internal::closure$0
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\rt.rs:175
  77: std::panicking::catch_unwind::do_call
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\panicking.rs:589
  78: std::panicking::catch_unwind
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\panicking.rs:552
  79: std::panic::catch_unwind
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\panic.rs:359
  80: std::rt::lang_start_internal
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library\std\src\rt.rs:171
  81: std::rt::lang_start<tuple$<> >
             at D:\windows-software\rust\rust_home\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\std\src\rt.rs:205
  82: main
  83: invoke_main
             at D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
  84: __scrt_common_main_seh
             at D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
  85: BaseThreadInitThunk
  86: RtlUserThreadStart


14 个赞

没玩过这个,感觉很复杂

3 个赞

感觉还好,其实前端就和写Electron差不多,不过一涉及到rust就有点麻烦,坑比较多,资料不如Electron丰富

2 个赞

tauri和另外一个有做集成网页端的devtools,但是官网文档基本没有修改监听端口的文档

2 个赞

对啊,tauri的文档真的很难评,nsis打包那一节,给一个nsis文档,连字段解释和示例都不给,纯自己探索

3 个赞

前端都一样,但是node不比rust好上手多了,现在什么都要rust化

1 个赞

主要是可以用系统的webview,不用打包一个chromium很香,打包出来很小,ipc感觉也比electron更灵活

虽然但是,没有什么大企业赞助啊 :melting_face:

确实,GitHub都快100k的star了,但还是感觉资料很匮乏 :melting_face:

这确实是他的优点,也是我想转他的理由,但是rust还是很劝退我

Rust文档感觉都有点晦涩。
佬这个栈回溯带出来的上下文好少,不知道是不是一个关键字tray_icon,栈帧是
28: tray_icon::platform_impl::platform::tray_proc
at D:\windows-software\rust\cargo_home\registry\src\index.crates.io-1949cf8c6b5b557f\tray-icon-0.21.1\src\platform_impl\windows\mod.rs:317
对应的代码是
/// Builds and adds a new [TrayIcon] to the system tray.
317 pub fn build(self) → Result {
318 TrayIcon::with_id(self.id, self.attrs)
319 }
可以把项目中相关的代码注释看看,如果是的再进一步找找

2 个赞

其实rust也就是上手困难,我最开始写也是根本过不了编译,过了一个星期差不多就很顺手了

tauri那个打包文档写的,纯纯反人类。
所有打包的可选项都给你包在一个大的目录里,根本没有结构可言,想找相关配置只能用ctrl+f自己搜。 :smiling_face_with_three_hearts:

2 个赞

yuán shén,qǐ dòng!

2 个赞

感谢佬,我去看看,我看是tao框架的flush_paint_message报错的,也去找了tao的issue,发现几乎没有可用信息 :smiling_face_with_tear:

是这样的,写nsis的模板真是把我折磨死了 :melting_face:

文档这点确实难绷:sweat_smile:

2 个赞

好好好,跑题了,有没有能力帮我看看栈帧,去给tao发一个pr :melting_face:

1 个赞

没有,我连 Rust 都只是刚入门只能写个 Hello world 那种()

1 个赞

真的很难绷,这一年多踩坑都给我踩昏了 :innocent:

1 个赞