OS_ACTIVITY_MODE non ha funzionato per me ( potrebbe essere stato perché ho sbagliato disable
a scrivere come disabled
, ma non è più naturale?!?), O almeno non ha impedito una grande quantità di messaggi. Quindi, ecco il vero affare con le variabili d'ambiente.
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);
}
Quindi l'impostazione OS_ACTIVITY_DT_MODE
su "NO" nelle variabili di ambiente (metodo GUI spiegato nello screenshot degli schemi nella risposta principale) fa funzionare per me.
Per quanto riguarda NSLog
la discarica di messaggi di sistema, errori e il tuo debug: probabilmente è comunque richiesto un vero approccio di registrazione, ad esempio https://github.com/fpillet/NSLogger .
O
Bevi il nuovo Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/
Non è sorprendente che ci siano alcuni intoppi dopo aver revisionato l'intero API di registrazione.
ADDENDUM
Ad ogni modo, NSLog
è solo uno spessore:
https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/
NSLog / CFLog
NSLog ora è solo uno spessore di os_log nella maggior parte dei casi.
Ha senso solo ora citare la fonte per l'altra variabile env. Abbastanza un posto diverso, questa volta dagli interni di Apple. Non sono sicuro del motivo per cui si sovrappongono. [Commento errato su NSLog
rimosso]
[Modificato il 22 settembre]: Mi chiedo cosa "release" e "stream" facciano diversamente da "debug". Fonte insufficiente.
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;
}
}