2017-09-28 14 views
11

Trong hệ điều hành MacOS 10.13 High Sierra trên Xcode 9 Tôi nhận được thông báo này đăng nhập:Ý nghĩa của: "Số phiên bản định dạng của tệp cây tìm kiếm (0) không được hỗ trợ"?

2017-09-28 15: 19: 28,246511 + 0800 wr [5376: 128.702] MessageTracer: load_domain_whitelist_search_tree: 73: Tìm cây tập tin của định dạng số phiên bản (0) không được hỗ trợ 2017/09/28 15: 19: 28,246541 + 0800 wr [5376: 128.702] MessageTracer: rơi trở lại để mặc định danh sách trắng

ý nghĩa của thông điệp này là gì?

+0

Tôi đang cố gắng để làm cho ứng dụng của tôi tiết kiệm và sau đó tải lại quyền truy cập vào một tệp dữ liệu - tức là, người dùng chọn một file hồ sơ muốn đã đọc, và lựa chọn đó sẽ tồn tại trong tệp ứng dụng lưu/tải. Tôi đã kết hợp URL (resolvingBookmarkData :) và bạn bè, nhưng cho đến nay vẫn không thành công. Làm như vậy là những gì đã kích hoạt các lỗi này cho tôi, vì vậy hãy kiểm tra hộp cát của bạn. – Feldur

+1

Tôi cũng thấy điều này, trong một ngữ cảnh hoàn toàn không liên quan. Tôi sẽ đặt cược rất nhiều rằng một số kỹ sư của Apple chỉ đơn giản là quên để loại bỏ các báo cáo khai thác gỗ trước khi mã trong High Sierra đã được vận chuyển. Điều này rất có thể không liên quan gì đến chúng tôi. – Bryan

+0

Tôi cũng thế. Tôi đã không thể tìm thấy những gì đang gây ra nó. – Wolfstar

Trả lời

2

Các thư đó đến từ một hàm msgtracer_domain_new trong /usr/lib/libDiagnosticMessagesClient.dylib.

  1. Chạy ứng dụng của bạn trên Xcode 9.
  2. Dừng lại.
  3. Trong navigator Debug, click vào NSApplicationMain ngay trên main
  4. Đặt một breakpoint ở dòng đầu tiên pushq %rbp
  5. Chạy ứng dụng của bạn một lần nữa.
  6. Khi điểm ngắt truy cập, hãy đặt một điểm ngắt khác bằng cách nhập breakpoint set -n msgtracer_domain_new
  7. Tiếp tục thực hiện chương trình.

Khi các điểm ngắt truy cập, hãy xem mã lắp ráp. bạn sẽ thấy:

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 

Trong trường hợp của tôi, MacBook Pro vào cuối năm 2011 chạy High Sierra 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 

tập tin đó không có một xattr format_version dự kiến ​​bởi các chức năng msgtracer_domain_new

Có ai biết làm thế nào để cập nhật nó?

Nối:

Lời khuyên cho việc nhìn vào hiện tượng tương tự.

Tìm id quá trình của ứng dụng của bạn.

$ ps -ef | grep your_app_name | grep -v grep 
    999 86803 86804 0 1:34AM ??   0:00.97 /Users/xxx/Library/Developer/Xcode/DerivedData/.... 

Lấy các đường dẫn tệp mà ứng dụng của bạn đã tải.

$ vmmap 86803 | perl -ne 'print "$1\n" if m{(/\S*)\Z}' | sort -u > z 

Chỉnh sửa tệp tạm thời khi cần để xóa đường dẫn tệp không tôn trọng.

Tìm tệp chứa thông báo.

$ cat z | xargs grep -l -b 'Search tree file' 2> /dev/null 
/usr/lib/libDiagnosticMessagesClient.dylib 

Xác nhận xem thư có tồn tại không.

$ strings /usr/lib/libDiagnosticMessagesClient.dylib | grep 'Search tree file' 
MessageTracer: %s:%d: Search tree file's format version number (%u) is not supported 

Tạo lệnh gỡ lỗi và sau đó áp dụng chúng.

$ 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 

Cách được đề cập ở trên không hoàn hảo. Nó không quản lý các khoảng trắng trong đường dẫn tệp. Miễn là nó hoạt động, nó sẽ ổn thôi. Tôi thích sử dụng perl để thao tác văn bản. Bạn sẽ sử dụng những cái bạn yêu thích.

2

lệnh này loại bỏ các thông điệp log:

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

Nó làm việc cho tôi - nhưng tại sao? – Adam

Các vấn đề liên quan