OS_ACTIVITY_MODE는 (나를 위해 일을하지 않았다 있습니다 내가 typo'd 때문이었다 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
환경 변수 (주요 답변의 Schemes 스크린 샷에서 설명하는 GUI 방법)에서 "NO"로 설정 하면 효과적입니다.
마찬가지로 지금까지와 같은 NSLog
시스템 메시지, 오류 및 자신의 디버깅에 대한 덤핑 지상되는 : 실제 로깅 방법은 아마도, 예를 들어, 어쨌든 호출됩니다 https://github.com/fpillet/NSLogger .
또는
: 새로운 쿨 에이드 한잔 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
NSLog는 이제 대부분의 상황에서 os_log에 대한 shim 일뿐입니다.
이제 다른 env 변수의 소스를 인용하는 것이 합리적입니다. 이번에는 Apple 내부와는 상당히 다른 곳입니다. 왜 겹치는 지 확실하지 않습니다. [ NSLog
삭제 에 대한 잘못된 설명 ]
[편집 9 월 22 일] : "release"와 "stream"이 "debug"와 다른 점이 궁금합니다. 소스가 충분하지 않습니다.
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;
}
}