Các thư đó đến từ một hàm msgtracer_domain_new
trong /usr/lib/libDiagnosticMessagesClient.dylib
.
- Chạy ứng dụng của bạn trên Xcode 9.
- Dừng lại.
- Trong navigator Debug, click vào
NSApplicationMain
ngay trên main
- Đặt một breakpoint ở dòng đầu tiên
pushq %rbp
- Chạy ứng dụng của bạn một lần nữa.
- 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
- 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.
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
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
Tôi cũng thế. Tôi đã không thể tìm thấy những gì đang gây ra nó. – Wolfstar