OS_ACTIVITY_MODE n'a pas fonctionné pour moi (il peut être parce que je typo'd disable
comme disabled
, mais est -ce pas plus naturel?!?), Ou du moins n'a pas empêché beaucoup de messages. Voici donc la vraie affaire avec les variables d'environnement.
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);
}
Donc, le réglage OS_ACTIVITY_DT_MODE
sur "NON" dans les variables d'environnement (méthode GUI expliquée dans la capture d'écran des schémas dans la réponse principale) le fait fonctionner pour moi.
En ce qui concerne NSLog
le dépotoir pour les messages système, les erreurs et votre propre débogage: une véritable approche de journalisation est probablement nécessaire de toute façon, par exemple https://github.com/fpillet/NSLogger .
OU
Buvez le nouveau Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/
Il n'est pas surprenant qu'il y ait quelques problèmes après avoir révisé l'ensemble API de journalisation.
ADDENDA
Quoi qu'il en soit, NSLog
c'est juste une cale:
https://developer.apple.com/library/content/releasenotes/Miscivers/RN-Foundation-OSX10.12/
NSLog / CFLog
NSLog est maintenant juste une cale à os_log dans la plupart des circonstances.
Cela n'a de sens que de citer la source de l'autre variable env. Un endroit assez disparate, cette fois par rapport aux internes d'Apple. Je ne sais pas pourquoi ils se chevauchent. [Commentaire incorrect sur NSLog
supprimé]
[Modifié le 22 sept.]: Je me demande ce que «libération» et «flux» font différemment que «débogage». Pas assez de source.
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;
}
}