Ẩn các bản ghi Xcode lạ không mong muốn


695

Khi sử dụng Xcode 8+ và tạo dự án trống mới, các nhật ký sau sẽ xuất hiện khi chạy ứng dụng:

2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0

Có lẽ ai đó đã tìm thấy một cấu hình cho việc này để xử lý?


1
Có vẻ như chỉ là gỡ lỗi thông tin đăng nhập còn sót lại từ sự phát triển. Điều tra ...
JAL

bạn đã tắt sử dụng api liên kết động trong xcode chưa?
Teja Nandamuri

Không hoạt động đối với tôi trong Xcode 8 có vẻ như, giải pháp này chỉ hoạt động với Xcode 8 beta.
Badal Shah

Tôi gặp vấn đề này với Xcode 8.2.1 trên El Capitan. Nâng cấp lên macOS Sierra đã khắc phục sự cố.
hwaxxer

Tôi vẫn gặp sự cố trên Xcode 9.3, tôi đã gửi Lỗi Apple # 34767176 (Xcode 9 Hiển thị Báo cáo in gỡ lỗi khung hệ thống), đây là bản sao của lỗi mở # 32256894 Vui lòng gửi bản sao lỗi cho Apple: bugreport.apple.com/web
Paul Solt

Câu trả lời:


1507

Thử cái này:

1- Từ menu Xcode mở: Sản phẩm> Lược đồ> Chỉnh sửa lược đồ

2- Trên Biến môi trường của bạn được đặt OS_ACTIVITY_MODE=disable

Ảnh chụp màn hình


25
Nó cũng hoạt động trên phiên bản Xcode 8.0 nên tôi đề nghị đây là giải pháp.
nadein

27
Đối với bất kỳ ai tự hỏi làm thế nào để đến màn hình đó, bạn cần truy cập Sản phẩm>
Lược đồ

46
@iDevzilla, Có một số vấn đề với giải pháp này, nó loại bỏ một số nội dung quan trọng ra khỏi nhật ký khi sử dụng thiết bị thực, như dữ liệu tự ghi. Xin vui lòng tổng quan lại, tôi không chắc đó là giải pháp lý tưởng nhất.
Itai Spector

104
Thật không may, tùy chọn này ẩn tất cả NSLogs từ một thiết bị thực sự đối với tôi ...
Dmitry Isaev

8
Vấn đề chỉ tồn tại trong Trình mô phỏng. Cá nhân tôi không tin rằng nên thêm biến môi trường, bởi vì nó cũng ẩn các nhật ký quan trọng như các vấn đề với Ràng buộc bố cục và trong số các ví dụ khác @ AirXygène đã đưa ra. Trong trình giả lập, bạn cũng có thể nhấn "CMD + /" để mở bảng điều khiển, nó sẽ cung cấp cho bạn các bản ghi lỗi thời. Hy vọng rằng Apple sẽ khắc phục vấn đề này trong Xcode, tuy nhiên, có rất nhiều sự quan tâm trong việc này khi nhìn vào số lượng
upvote

360

Dựa trên tweet gốc từ @rustyshelf và câu trả lời minh họa từ iDevzilla, đây là một giải pháp giúp loại bỏ tiếng ồn từ trình giả lập mà không vô hiệu hóa đầu ra NSLog từ thiết bị.

  1. Trong Sản phẩm> Lược đồ> Chỉnh sửa lược đồ ...> Chạy (Gỡ lỗi), đặt biến môi trường OS_ACTIVITY_MODE thành $ {DEBUG_ACTIVITY_MODE} để nó trông như thế này:

nhập mô tả hình ảnh ở đây

  1. Chuyển đến cài đặt xây dựng dự án của bạn và nhấp vào + để thêm Cài đặt do người dùng xác định có tên DEBUG_ACTIVITY_MODE. Mở rộng cài đặt này và Nhấp vào + bên cạnh Gỡ lỗi để thêm giá trị cụ thể cho nền tảng. Chọn danh sách thả xuống và thay đổi nó thành "Bất kỳ Trình mô phỏng iOS nào". Sau đó đặt giá trị của nó thành "vô hiệu hóa" để nó trông như thế này:

nhập mô tả hình ảnh ở đây


6
@NSNoob đảm bảo bạn không có khoảng trắng trong biến env.
sbarow

7
Quá tệ đây không phải là câu trả lời được chấp nhận và quá tệ câu trả lời này đang làm mất số phiếu bầu lên. Nhiều câu trả lời IMHO tốt hơn vì nó chỉ tàn tật OS_ACTIVITY_MODE cho DEBUG xây dựng dựa trên mô phỏng.
Swany

18
Điều này không làm việc cho tôi và cũng không phải là câu trả lời được bình chọn hàng đầu. Sử dụng Xcode 8.2.1 trên OS X 10.11.6 El Capitan. Nhưng những gì đã làm là sự kết hợp của câu trả lời này và câu trả lời của BaseZen, sử dụng OS_ACTIVITY_DT_MODE thay vì OS_ACTIVITY_MODE. (Và thật bất ngờ đối với tôi ít nhất là cả "KHÔNG" và "vô hiệu hóa" đã tắt đăng nhập tràn lan.)
RenniePet

1
@RenniePet, đó chính xác là những gì đã làm cho tôi. Cảm ơn!
Misha

8
Giải pháp này sẽ ẩn tất cả NSLog bắt đầu bằng Xcode 9. Để giữ NSLog, hãy thay thế disablebằng default.
Cœur

88

OS_ACTIVITY_MODE không làm việc cho tôi (nó có thể đã vì tôi typo'd disablenhư disabled, nhưng không phải là tự nhiên hơn?!?), Hoặc ít nhất là không ngăn chặn được rất nhiều tin nhắn. Vì vậy, đây là thỏa thuận thực sự với các biến môi trường.

https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Pl platform / MacOSX / Pl platformDarwin.cpp

lldb_private::Error
PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) {
  // Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr
  // if the OS_ACTIVITY_DT_MODE environment variable is set.  (It doesn't
  // require any specific value; rather, it just needs to exist).
  // We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag
  // is not set.  Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell
  // LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they
  // specifically want it unset.
  const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE";
  auto &env_vars = launch_info.GetEnvironmentEntries();
  if (!env_vars.ContainsEnvironmentVariable(disable_env_var)) {
    // We want to make sure that OS_ACTIVITY_DT_MODE is set so that
    // we get os_log and NSLog messages mirrored to the target process
    // stderr.
    if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE"))
      env_vars.AppendArgument(llvm::StringRef("OS_ACTIVITY_DT_MODE=enable"));
  }

  // Let our parent class do the real launching.
  return PlatformPOSIX::LaunchProcess(launch_info);
}

Vì vậy, việc đặt OS_ACTIVITY_DT_MODEthành "KHÔNG" trong các biến môi trường (phương pháp GUI được giải thích trong ảnh chụp màn hình Scheme trong câu trả lời chính) làm cho nó hoạt động với tôi.

Theo như NSLoglà nơi bán phá giá cho các thông báo hệ thống, lỗi và gỡ lỗi của riêng bạn: một cách tiếp cận ghi nhật ký thực sự có thể được gọi bằng mọi cách, ví dụ: https://github.com/fpillet/NSLogger .

HOẶC LÀ

Uống Kool-Aid mới: http://asciiwwdc.com/2016/simes/721 https://developer.apple.com/ideo/play/wwdc2016/721/ Không có gì đáng ngạc nhiên khi có một số khó khăn sau khi đại tu toàn bộ API đăng nhập.

ĐỊA CHỈ

Dù sao, NSLogchỉ là một shim:

https://developer.apple.com/l Library / content / releasenotes / Molic / RN-Foundation-OSX10.12 /

NSLog / CFLog

NSLog bây giờ chỉ là một shim để os_log trong hầu hết các trường hợp.

Bây giờ chỉ có ý nghĩa để trích dẫn nguồn cho biến env khác. Khá là một nơi khác biệt, lần này là từ bên trong Apple. Không chắc chắn tại sao chúng chồng chéo. [Nhận xét không chính xác về việc NSLogxóa]

[Đã chỉnh sửa ngày 22 tháng 9]: Tôi tự hỏi "phát hành" và "luồng" làm gì khác với "gỡ lỗi". Không đủ nguồn.

https://github.com/macosforge/libdispatch/blob/8e63547ea4e5abbfe55c0c3064181c4950a791d3/src/voucher.c

e = getenv("OS_ACTIVITY_MODE");
if (e) {
    if (strcmp(e, "release") == 0) {
        mode = voucher_activity_mode_release;
    } else if (strcmp(e, "debug") == 0) {
        mode = voucher_activity_mode_debug;
    } else if (strcmp(e, "stream") == 0) {
        mode = voucher_activity_mode_stream;
    } else if (strcmp(e, "disable") == 0) {
        mode = voucher_activity_mode_disable;
    }
}

11
Luôn luôn tốt đẹp để xem một câu trả lời cung cấp lý do và nền tảng chứ không chỉ là sửa chữa nhanh chóng.
jscs

Đã thực hiện câu trả lời này bằng OS_ACTIVITY_DT_MODE = NO
Almas Adilbek

1
Điều này có tạo ra hành vi khác với OS_ACTIVITY_MODE = vô hiệu hóa không? Có một số lý do để thích giải pháp này?
n8gray

1
Nó không. Nó che giấu tất cả.
durazno

2
@Frizlab Có tôi đề cập đến cả hai trong bài viết của tôi. Xem "HOẶC" ... Tôi gọi os_logchính thức là Viện trợ Kool mới.
BaseZen

64

Một tweet đã có câu trả lời cho tôi - https://twitter.com/rustyshelf/status/775505191160328194

Để ngăn Xcode 8 iOS Simulator đăng nhập như điên, hãy đặt biến môi trường OS_ACTIVITY_MODE = tắt trong sơ đồ gỡ lỗi của bạn.

Nó đã làm việc.


6
Như đã nói: OS_ACTIVITY_MODE = vô hiệu hóa hủy tất cả các bản ghi khác với NSLog.
chục

5
Giải pháp này sẽ ẩn tất cả NSLog bắt đầu bằng Xcode 9. Để giữ NSLog, hãy thay thế disablebằng default.
Cœur

34

Vui lòng tìm các bước dưới đây.

  1. Chọn Sản phẩm => Lược đồ => Chỉnh sửa lược đồ hoặc sử dụng phím tắt: CMD + <
  2. Chọn Runtùy chọn từ bên trái.
  3. Trên phần Biến môi trường, thêm biến OS_ACTIVITY_MODE = vô hiệu hóa

Để biết thêm thông tin xin vui lòng tìm đại diện GIF dưới đây.

Chỉnh sửa sơ đồ


3
Đợi .... Trên lần chạy thứ hai, nó hoạt động. Kudos cho video Gif. Các câu trả lời tốt nhất luôn ở phía dưới!
eonist

2
Giải pháp này sẽ ẩn tất cả NSLog bắt đầu bằng Xcode 9. Để giữ NSLog, hãy thay thế disablebằng default.
Cœur

33

Điều này vẫn chưa được sửa trong Xcode Phiên bản 8.0 beta 2 (8S162m) đối với tôi và các nhật ký bổ sung cũng xuất hiện trong bảng điều khiển Xcode

** EDIT 8/1/16: Điều này đã được ghi nhận trong ghi chú phát hành cho Xcode 8 Beta 4 (8S188o) vì vấn đề vẫn còn tồn tại .

Các sự cố đã biết trong Xcode 8 beta 4 - IDE

Gỡ lỗi

• Bảng điều khiển gỡ lỗi Xcode hiển thị ghi nhật ký bổ sung từ các khung hệ thống khi gỡ lỗi các ứng dụng trong Trình mô phỏng. (27331147, 26652255)

Có lẽ điều này sẽ được giải quyết bằng bản phát hành GM. Cho đến lúc đó sự kiên nhẫn và mặc dù không lý tưởng nhưng một cách giải quyết tôi đang sử dụng là dưới đây ...

Tương tự như câu trả lời trước tôi phải:

  • tiền tố bản ghi in của tôi với một số loại ký tự đặc biệt (ví dụ * hoặc ^ hoặc! v.v.)

  • Sau đó sử dụng hộp tìm kiếm ở phía dưới bên phải của ngăn giao diện điều khiển để lọc nhật ký bảng điều khiển của tôi bằng cách nhập ký tự đặc biệt đã chọn của tôi để bảng điều khiển hiển thị nhật ký in của tôi như dự định

bảng điều khiển


1
@SimplyLearning bạn sẽ tìm thấy thông tin này trên twitter. Nhưng bạn có thể kiểm tra trang web chính thức này từ apple: developer.apple.com/news hoặc newsfeed của họ để nhận cập nhật khi họ xuất bản chúng: developer.apple.com/news/rss/news.rss Nhân tiện : điều này dường như vẫn còn là một vấn đề trong Xcode Beta 3.
benrudhart

50
Chỉ cần có Xcode 8 GM, và vấn đề vẫn còn tồn tại. Rất phiền phức!!
AdamM

8
Chỉ cần tải xuống Xcode Phiên bản 8.0 (8A218a) từ App Store. Vấn đề vẫn còn đó.
Statik

4
Thật nực cười. Vẫn còn đó trong phiên bản Final MAS.
Shai Mishali

1
Chúng tôi sử dụng tiền tố thẻ để lọc. Một số vấn đề là: Nhiều dòng sẽ chỉ hiển thị đầu tiên. Khi sử dụng lldb để gỡ lỗi, bạn cần chuyển đổi bộ lọc. Thực sự rất buồn khi ngày nay, giao diện điều khiển vô cùng hạn chế. Chúng tôi có một Ứng dụng để lọc tốt, nhưng chúng tôi cần sao chép / dán từ bảng điều khiển. Buồn làm sao.
bauerMusic

23

Giải pháp của tôi là sử dụng lệnh gỡ lỗi và / hoặc Thông báo nhật ký trong các điểm dừng.

nhập mô tả hình ảnh ở đây

Và thay đổi đầu ra của giao diện điều khiển từ Tất cả đầu ra thành Đầu ra của trình gỡ lỗi như

nhập mô tả hình ảnh ở đây


14

Ổn thỏa. Dường như có rất nhiều hỗn loạn về vấn đề này, vì vậy tôi sẽ cho bạn một cách để duy trì nó mà không cần sử dụng thủ thuật lược đồ đó. Tôi sẽ đề cập cụ thể đến Trình mô phỏng iOS, nhưng điều này cũng có thể cần được áp dụng cho TV Sim cũng được đặt trong một thư mục khác.

Vấn đề gây ra tất cả những thứ này là các lỗi nằm trong thư mục Xcode. Có một quá trình được khởi chạy có tên là configd_sim khi Sim bắt đầu đọc các phần tử trong và in thông tin gỡ lỗi nếu các phần tử chỉ định chúng nên được ghi lại.

Các bảng được đặt ở đây:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems

Nếu bạn đang chơi xung quanh với bản beta, hãy lưu ý rằng thư mục sẽ khác.

Bạn sẽ thấy nhiều plists trong thư mục này. Bây giờ, xây dựng và chạy ứng dụng của bạn và quan sát các bản ghi. Bạn đang tìm kiếm nội dung ngay lập tức theo hệ thống con: một phần. Đó là tên ngay sau đây đại diện cho các vấn đề tương ứng có vấn đề.

nhập mô tả hình ảnh ở đây

Từ đó, hoặc sửa đổi plist để loại bỏ khóa / giá trị gỡ lỗi [Level] là một từ điển chứa "Enable" => "Default"khóa / giá trị ... hoặc chỉ đơn giản là xóa plist. Lưu ý rằng bạn sẽ cần phải root để thực hiện một trong hai cách này vì chúng nằm trong ứng dụng Xcode.

các plutil -plệnh có thể được sử dụng cho bạn là tốt. I E

plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist

Điều này đã cho tôi một trong những vấn đề có vấn đề bao gồm:

{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}

Chúc may mắn :]


Tôi đã nén, sau đó xóa trong trường hợp tôi cần khôi phục.
dandan78

1
Tôi thấy điều này không thể làm im lặng rất nhiều mã mạng, có lẽ vì nó thiếu tên hệ thống con:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen

@BaseZen Thật không may, tôi chỉ giải quyết câu hỏi OP không chứa bất kỳ vấn đề đăng nhập tcp nào. Bạn có thể tạo một bài viết SO mới nếu bạn cần trợ giúp giải quyết vấn đề này.
Sao chổi của Sozin

13

Điều này có liên quan đến một vấn đề đã biết với việc ghi nhật ký được tìm thấy trong Ghi chú phát hành Xcode 8 Beta (cũng đã hỏi một kỹ sư tại WWDC).

Khi gỡ lỗi các ứng dụng WatchOS trong trình giả lập Watch, HĐH có thể tạo ra quá nhiều đăng nhập không có ích. (26652255)

Hiện tại không có cách giải quyết có sẵn, bạn phải chờ phiên bản Xcode mới.

EDIT 7/5/16: Điều này được cho là đã được sửa kể từ Xcode 8 Beta 2:

Đã giải quyết trong Xcode 8 beta 2 - IDE

Gỡ lỗi

  • Khi gỡ lỗi một ứng dụng trên Trình mô phỏng, các bản ghi sẽ hiển thị. (26457535)

Ghi chú phát hành Xcode 8 Beta 2


Cũng nghĩ vậy, nhưng tôi không sử dụng ứng dụng watchOS hay giả lập watchOS. Nhưng nó vẫn có thể xảy ra với các Sim khác. Tạm dừng và xem liệu Xcode 8 Beta nào đó sẽ khắc phục trong vài tuần / tháng tiếp theo.
Hans Knöchel

@HansKnoechel tôi cũng vậy nhưng tôi có thể xác nhận rằng sự cố này xảy ra với bất kỳ ứng dụng nào. Không có từ "chính thức" nào từ Apple ngoài các ghi chú phát hành và một số thảo luận tại WWDC.
JAL

cảm ơn, cùng ở đây Chúng ta nên nói về điều đó vào ngày mai trong WWDC, hehe :-)
Hans Knöchel

Cũng xảy ra với Trình mô phỏng iPhone 5s của tôi, có thể là tất cả các trình giả lập.
SimplGy

Tôi không thể truy cập vào liên kết trong câu trả lời này, mặc dù đã đăng nhập, nhưng liên kết này hoạt động: adcdoad.apple.com/WWDC_2016/Xcode_8_beta/ Lỗi
SimplGy

7

Đây không còn là vấn đề trong xcode 8.1 (phiên bản thử nghiệm 8.1 beta (8T46g)) . Bạn có thể loại bỏOS_ACTIVITY_MODE biến môi trường khỏi sơ đồ của bạn.

https://developer.apple.com/go/?id=xcode-8.1-beta-rn

Gỡ lỗi

• Bảng điều khiển gỡ lỗi Xcode không còn hiển thị ghi nhật ký bổ sung từ các khung hệ thống khi gỡ lỗi các ứng dụng trong Trình mô phỏng. (26652255, 27331147)


20
Tôi vẫn nhận được rất nhiều đăng nhập giả trong 8.1. Chủ yếu là ổ cắm kỳ lạ và công cụ kết nối tcp. Bất cứ ai khác, hoặc chỉ tôi?
Jordan Smith

3
Tôi vừa tải xuống Xcode 8.1 hôm nay (31/10/2016) và vẫn thấy một số nhật ký gỡ lỗi như thế này [MC] Reading from private effective user settings.từ một dự án giả mới trống Tập tin> Mới> Dự án.
Zhang

4

Trong Xcode 10 , OS_ACTIVITY_MODEbiến có giá trị disable(hoặc default) cũng tắt NSLogbất kể là gì.

Vì vậy, nếu bạn muốn loại bỏ tiếng ồn của bảng điều khiển nhưng không phải là nhật ký của riêng bạn, bạn có thể thử bản cũ printf("")thay vì NSLog vì nó không bị ảnh hưởng bởi OS_ACTIVITY_MODE= disable.

Nhưng tốt hơn hãy kiểm tra os_logAPI mới ở đây .


1

Giải pháp này đã được làm việc cho tôi:

  1. Chạy ứng dụng trong trình giả lập
  2. Mở nhật ký hệ thống ( + /)

Điều này sẽ loại bỏ tất cả dữ liệu gỡ lỗi và cả NSLogs của bạn.

Để chỉ lọc các câu lệnh NSLog của bạn:

  1. Tiền tố mỗi ký hiệu, ví dụ: NSLog(@"^ Test Log")
  2. Lọc kết quả bằng hộp tìm kiếm ở trên cùng bên phải, "^" trong trường hợp trên

Đây là những gì bạn sẽ nhận được:

Ảnh chụp màn hình của bảng điều khiển

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.