OS_ACTIVITY_MODE no funcionó para mí ( puede haber sido porque escribí disable
comodisabled
, pero ¿no es más natural?!?), O al menos no evitó una gran cantidad de mensajes. Así que aquí está el trato real con las variables de entorno.
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);
}
Entonces configurando OS_ACTIVITY_DT_MODE
"NO" en las variables de entorno (método GUI explicado en la captura de pantalla de esquemas en la respuesta principal) hace que funcione para mí.
En cuanto a NSLog
ser el vertedero de mensajes del sistema, errores y su propia depuración: probablemente se requiera un enfoque de registro real, por ejemplo, https://github.com/fpillet/NSLogger .
O
Beba el nuevo Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/
No es sorprendente que haya algunos inconvenientes después de revisar todo API de registro.
APÉNDICE
De todos modos, NSLog
es solo una cuña:
https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/
NSLog / CFLog
NSLog ahora es solo un calce para os_log en la mayoría de las circunstancias.
Solo tiene sentido ahora citar la fuente para la otra variable env. Un lugar bastante diferente, esta vez de las partes internas de Apple. No estoy seguro de por qué se superponen. [Comentario incorrecto sobre NSLog
eliminado]
[Editado el 22 de septiembre]: Me pregunto qué hacen "liberar" y "transmitir" de manera diferente a "depurar". No hay suficiente fuente.
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;
}
}