Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos “是什么意思?”;搜索树文件';不支持s格式版本号(0)";?_Macos_Xcode9_Macos High Sierra - Fatal编程技术网

Macos “是什么意思?”;搜索树文件';不支持s格式版本号(0)";?

Macos “是什么意思?”;搜索树文件';不支持s格式版本号(0)";?,macos,xcode9,macos-high-sierra,Macos,Xcode9,Macos High Sierra,在Xcode 9上的macOS 10.13 High Sierra中,我收到以下日志消息: 2017-09-28 15:19:28.246511+0800 wr[5376:128702]消息跟踪器: 加载\域\白名单\搜索\树:73:搜索树文件的格式 不支持版本号(0) 2017-09-28 15:19:28.246541+0800 wr[5376:128702]MessageTracer:返回默认白名单 此消息的含义是什么?这些消息来自/usr/lib/libDiagnosticMessage

在Xcode 9上的macOS 10.13 High Sierra中,我收到以下日志消息:

2017-09-28 15:19:28.246511+0800 wr[5376:128702]消息跟踪器: 加载\域\白名单\搜索\树:73:搜索树文件的格式 不支持版本号(0) 2017-09-28 15:19:28.246541+0800 wr[5376:128702]MessageTracer:返回默认白名单


此消息的含义是什么?

这些消息来自
/usr/lib/libDiagnosticMessagesClient.dylib
中的函数
msgtracer\u domain\u new

  • 在Xcode 9上运行应用程序
  • 住手
  • 在调试导航器中,单击
    NSApplicationMain
    正上方的
    main
  • 在第一行设置断点
    pushq%rbp
  • 再次运行你的应用程序
  • 当断点命中时,通过键入
    断点集-n msgtracer\u domain\u new
  • 继续执行程序
  • 当断点到达时,查看汇编代码。你会看到:

    libDiagnosticMessagesClient.dylib`msgtracer_domain_new:
    ->  0x7fff667c7f08 <+0>:    pushq  %rbp
        0x7fff667c7f09 <+1>:    movq   %rsp, %rbp
        0x7fff667c7f0c <+4>:    pushq  %r15
    
    (omit)
    
        0x7fff667c7ff1 <+233>:  leaq   0xc1d(%rip), %rdi         ; "/Library/Application Support/CrashReporter/SubmitDiagInfo.domains"
        0x7fff667c7ff8 <+240>:  xorl   %r13d, %r13d
        0x7fff667c7ffb <+243>:  movl   $0x20, %esi
        0x7fff667c8000 <+248>:  xorl   %eax, %eax
        0x7fff667c8002 <+250>:  callq  0x7fff667c8990            ; symbol stub for: open
    
    (omit)
    
        0x7fff667c801d <+277>:  leaq   0xc33(%rip), %rsi         ; "format_version"
        0x7fff667c8024 <+284>:  movl   $0x4, %ecx
        0x7fff667c8029 <+289>:  xorl   %r8d, %r8d
        0x7fff667c802c <+292>:  xorl   %r9d, %r9d
        0x7fff667c802f <+295>:  movl   %r15d, %edi
        0x7fff667c8032 <+298>:  movq   %r12, %rdx
        0x7fff667c8035 <+301>:  callq  0x7fff667c895a            ; symbol stub for: fgetxattr
        0x7fff667c803a <+306>:  cmpl   %r13d, (%r12)
        0x7fff667c803e <+310>:  jne    0x7fff667c808b            ; <+387>
        0x7fff667c8040 <+312>:  movl   $0x0, (%rsp)
        0x7fff667c8047 <+319>:  leaq   0xc18(%rip), %rcx         ; "MessageTracer: %s:%d: Search tree file's format version number (%u) is not supported"
        0x7fff667c804e <+326>:  leaq   0xb9e(%rip), %r8          ; "load_domain_whitelist_search_tree"
    
    (omit)
    
        0x7fff667c808f <+391>:  leaq   0xc25(%rip), %rcx         ; "MessageTracer: Falling back to default whitelist"
        0x7fff667c8096 <+398>:  xorl   %edi, %edi
        0x7fff667c8098 <+400>:  xorl   %esi, %esi
        0x7fff667c809a <+402>:  movl   $0x6, %edx
        0x7fff667c809f <+407>:  xorl   %eax, %eax
        0x7fff667c80a1 <+409>:  callq  0x7fff667c8924            ; symbol stub for: asl_log
    
    该文件没有函数
    msgtracer\u domain\u new所需的xattr
    format\u版本

    有人知道如何更新吗

    追加:

    研究类似现象的提示

    查找应用程序的进程id

    $ ps -ef | grep your_app_name | grep -v grep
      999 86803 86804   0  1:34AM ??         0:00.97 /Users/xxx/Library/Developer/Xcode/DerivedData/....
    
    获取应用程序已加载的文件路径

    $ vmmap 86803 | perl -ne 'print "$1\n" if m{(/\S*)\Z}' | sort -u > z
    
    根据需要编辑临时文件以删除不相关的文件路径

    查找包含消息的文件

    $ cat z | xargs grep -l -b 'Search tree file' 2> /dev/null
    /usr/lib/libDiagnosticMessagesClient.dylib
    
    确认消息是否存在

    $ strings /usr/lib/libDiagnosticMessagesClient.dylib | grep 'Search tree file'
    MessageTracer: %s:%d: Search tree file's format version number (%u) is not supported
    
    生成调试器命令,然后应用它们

    $ nm /usr/lib/libDiagnosticMessagesClient.dylib | grep " T " | sort -u | perl -pe 's/.* _/breakpoint set -n /'
    breakpoint set -n msgtracer_domain_new
    breakpoint set -n msgtracer_domain_free
    breakpoint set -n msgtracer_msg_new
    breakpoint set -n msgtracer_set
    breakpoint set -n msgtracer_msg_free
    breakpoint set -n msgtracer_vlog
    breakpoint set -n msgtracer_log
    breakpoint set -n msgtracer_vlog_with_keys_skip_nulls
    breakpoint set -n msgtracer_vlog_with_keys
    breakpoint set -n msgtracer_log_with_keys
    breakpoint set -n msgtracer_log_with_keys_skip_nulls
    breakpoint set -n msgtracer_uuid_create
    
    上述方式并不完美。它不考虑文件路径中的空白。只要有效,就可以了。
    我喜欢使用
    perl
    来处理文本。您将使用您喜爱的日志。

    此命令将删除日志消息:

    xattr -w format_version 1 "/Library/Application Support/CrashReporter/SubmitDiagInfo.domains"
    

    我在一台更新为High Sierra的计算机上看到了这个问题


    我转到系统首选项中的安全和隐私面板。在“隐私”选项卡上,我解锁并更新了隐私设置。我设置了与苹果和第三方开发者的共享。问题消失了。

    我正在尝试让我的应用程序保存,然后重新加载对数据文件的访问-即,用户选择应用程序文件希望读取的文件,并且该选择应在应用程序文件保存/加载后继续。我已经合并了URL(resolvingBookmarkData:)和朋友,但到目前为止还没有成功。这样做对我来说是触发这些错误的原因,所以请检查您的沙箱。我也在一个完全不相关的上下文中看到了这一点。我敢打赌,在High Sierra中的代码发布之前,一些苹果工程师只是忘记删除日志语句。这很可能与我们无关,我也是。我无法找到原因。请尝试更新您的隐私设置,以便在系统首选项中与Apple和第三方开发人员共享诊断。@Adam Tora回答中对此进行了解释:“该文件没有一些旧计算机上的函数
    msgtracer\u domain\u new
    ”所期望的xattr
    format\u版本。因此,在文件中写入xattr
    format\u version
    应该可以解决这个问题。
    xattr -w format_version 1 "/Library/Application Support/CrashReporter/SubmitDiagInfo.domains"