這些消息來自於功能msgtracer_domain_new
在/usr/lib/libDiagnosticMessagesClient.dylib
。
- 上的Xcode 9
- 停下來運行應用程序。
- 在調試導航,點擊
NSApplicationMain
略高於main
- 設置斷點在第一線
pushq %rbp
- 再次運行你的應用程序。
- 當斷點擊中時,通過鍵入設置另一個斷點
breakpoint set -n msgtracer_domain_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
在我而言,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
來操縱文字。你會用你最喜歡的。
我試圖讓我的應用程序保存,然後重裝訪問數據文件 - 即用戶挑選的應用程序文件要讀了文件,該選擇應該可以在應用程序文件保存/加載時保留我已經加入了URL(resolvingBookmarkData :)和朋友,但迄今未成功。這樣做是爲我引發了這些錯誤,所以請檢查你的沙盒。 – Feldur
我也看到了這一點,在一個完全不相關的背景下。我敢打賭,一些蘋果工程師在High Sierra的代碼出貨之前忘了刪除日誌記錄。這很可能與我們無關。 – Bryan
我也是。我一直無法找到是什麼原因造成的。 – Wolfstar