OS_ACTIVITY_MODE không làm việc cho tôi (nó có thể đã vì tôi typo'd disable
như 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_MODE
thà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ư NSLog
là 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, NSLog
chỉ 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 NSLog
xó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;
}
}