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
पर्यावरण चर ("जीयूआई विधि मुख्य उत्तर में स्क्रीनशॉट में समझाया विधि) में" नहीं " सेट करना मेरे लिए काम करता है।
जहाँ तक NSLog
सिस्टम संदेशों, त्रुटियों और अपने स्वयं के डिबगिंग के लिए डंपिंग ग्राउंड होने की बात है: एक वास्तविक लॉगिंग दृष्टिकोण को संभवतः वैसे भी कहा जाता है, जैसे https://github.com/fpillet/NSLogger ।
या
नया Kool-Aid पियें: http://asciiwwdc.com/2016/session/721 https://developer.apple.com/videos/play/wwdc2016/721/
यह आश्चर्य की बात नहीं है कि पूरे शासन के बाद कुछ अड़चनें हैं लॉगिंग एपीआई।
परिशिष्ट
वैसे भी, NSLog
बस एक शर्म है:
https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/
NSLog / CFLog
NSLog अब ज्यादातर परिस्थितियों में os_log के लिए केवल एक दिखावा है।
केवल अन्य env वैरिएबल के लिए स्रोत को उद्धृत करने के लिए अब समझ में आता है। काफी अलग जगह, इस बार Apple इंटर्नल्स से। यह सुनिश्चित नहीं है कि वे अतिव्यापी क्यों हैं। [ NSLog
हटाए जाने के बारे में गलत टिप्पणी ]
[संपादित 22 सितंबर]: मुझे आश्चर्य है कि "डिबग" की तुलना में "रिलीज़" और "स्ट्रीम" अलग क्या करते हैं। पर्याप्त स्रोत नहीं है।
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;
}
}