当使用Xcode 8+并创建一个新的空白项目时,运行应用程序时会出现以下日志:
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
也许有人已经找到了这个的配置?
我读了所有的解决方案,到目前为止没有任何工作,我在写这个响应的时候使用XCODE 12.5,这是在调试器中看到的最讨厌的事情,有这么一堆/泛滥的不想要的消息。
我所做的解决方案比大多数复杂的解决方案要简单得多,以下是我解决这个烦人问题的方法:
不需要使用任何环境变量等,否则使用这些建议的前一篇文章将禁用NSLOG输出,这不是你想要的在这种情况下。
我确保我所有的NSLOG将包含一个字符串,我将在以后监视,例如:
以前我经常做:
NSLog(@"Hello World");
现在,我想:
NSLog(@"[Admin]: Hello World");
而“[Admin]”是我的程序名(或除[Admin]以外的任何字符串)。
(可选步骤)或(更容易),我写了一个函数来通道(好吧;代理)NSLog到另一个全局函数“日志”,而所有我的日志将去该函数,然后日志函数将追加“[Admin]”字符串到原始日志字符串,还添加日志时间和其他项目,我需要等(类似于WebLogic或任何其他JAVA日志),这确保所有日志将遵循一个标准。
…这是价值百万美元的核武器:
现在,进入你的调试器窗口,在底部你会看到一个“搜索”窗口,而它说“过滤器”,输入你的字符串(例如;“[Admin]”),按ENTER键,任务完成。
这样,你只会看到你喜欢的线条,
当你想过滤掉其他组件时也很有用,例如,对于网络通信,我使用更多的字符串,我可以稍后过滤。
换句话说,烦人的日志行与你的应用程序无关,但你选择不看到他们使用上述命令,我希望解决这个问题。
希望大家都能度过美好的一天。
H
OS_ACTIVITY_MODE对我不起作用(这可能是因为我将disable拼写为disabled,但这不是更自然吗?!?),或者至少没有阻止大量消息。这就是环境变量的真正含义。
https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/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);
}
因此,在环境变量中设置OS_ACTIVITY_DT_MODE为“NO”(在主要回答中的方案截图中解释的GUI方法)使它为我工作。
至于NSLog是系统消息、错误和你自己的调试的转储场所:一个真正的日志记录方法可能无论如何都被调用,例如https://github.com/fpillet/NSLogger。
OR
喝新的酷爱饮料:http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/
在彻底检查整个日志API之后出现一些问题并不奇怪。
齿顶高
不管怎样,NSLog只是一个垫片:
https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/
NSLog / CFLog . log
NSLog现在只是在大多数情况下os_log的一个垫片。
现在只有为另一个env变量引用源代码才有意义。这是一个完全不同的地方,这一次来自苹果内部。不知道为什么它们重叠。[关于NSLog的错误评论被删除]
[编辑22 Sep]:我想知道“发布”和“流”与“调试”有什么不同。来源不够。
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;
}
}