2017-09-28 90 views
11

在MacOS上10.13高塞拉利昂上的Xcode 9我得到這個日誌消息:是什麼意思:「不支持搜索樹文件的格式版本號(0)」?

2017年9月28日15:19:28.246511 + 0800 WR [5376:128702] MessageTracer: load_domain_whitelist_search_tree:73:搜索樹文件的格式 版本號(0),不支持 2017年9月28日15:19:28.246541 + 0800 WR [5376:128702] MessageTracer:落回默認白名單

這是該消息的意思?

+0

我試圖讓我的應用程序保存,然後重裝訪問數據文件 - 即用戶挑選的應用程序文件要讀了文件,該選擇應該可以在應用程序文件保存/加載時保留我已經加入了URL(resolvingBookmarkData :)和朋友,但迄今未成功。這樣做是爲我引發了這些錯誤,所以請檢查你的沙盒。 – Feldur

+1

我也看到了這一點,在一個完全不相關的背景下。我敢打賭,一些蘋果工程師在High Sierra的代碼出貨之前忘了刪除日誌記錄。這很可能與我們無關。 – Bryan

+0

我也是。我一直無法找到是什麼原因造成的。 – Wolfstar

回答

2

這些消息來自於功能msgtracer_domain_new/usr/lib/libDiagnosticMessagesClient.dylib

  1. 上的Xcode 9
  2. 停下來運行應用程序。
  3. 在調試導航,點擊NSApplicationMain略高於main
  4. 設置斷點在第一線pushq %rbp
  5. 再次運行你的應用程序。
  6. 當斷點擊中時,通過鍵入設置另一個斷點breakpoint set -n msgtracer_domain_new
  7. 繼續執行程序。

當斷點擊中時,請查看彙編代碼。您將看到:

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 

在我而言,MacBook Pro的2011年年底運行海伊謝拉10.13:

$ ls [email protected] "/Library/Application Support/CrashReporter/SubmitDiagInfo.domains" 
[email protected] 1 root admin 12988 Sep 21 2014 /Library/Application Support/CrashReporter/SubmitDiagInfo.domains 
    com.apple.TextEncoding  15 
    os_version  12 

該文件不具有由功能msgtracer_domain_new

有誰預期XATTR format_version知道如何更新它?

追加:

提示尋找到類似的現象。

找到您的應用程序的進程標識。

$ 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來操縱文字。你會用你最喜歡的。

2

此命令刪除日誌消息:

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

它爲我工作 - 但爲什麼? – Adam