Verstecke seltsame unerwünschte Xcode-Protokolle

695

Wenn Sie den Xcode 8+ verwenden und ein neues leeres Projekt erstellen, werden beim Ausführen der Anwendung die folgenden Protokolle angezeigt:

2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0

Vielleicht hat jemand bereits eine Konfiguration dafür gefunden?

Hans Knöchel
quelle
1
Scheint nur das Debuggen von Protokollinformationen zu sein, die von der Entwicklung übrig geblieben sind. Untersuchung ...
JAL
Hast du die Verwendung der dynamischen Linker-API in xcode deaktiviert?
Teja Nandamuri
Wenn ich in Xcode 8 nicht arbeite, scheint diese Lösung nur für Xcode 8 Beta zu funktionieren.
Badal Shah
Ich hatte dieses Problem mit Xcode 8.2.1 auf El Capitan. Ein Upgrade auf macOS Sierra hat das Problem behoben.
Hwaxxer
Ich sehe immer noch das Problem in Xcode 9.3. Ich habe den Apple-Fehler # 34767176 (Xcode 9 zeigt System Framework-Debug-Druckanweisungen an) gesendet. Dies ist ein Duplikat des offenen Fehlers # 32256894 Bitte senden Sie ein Duplikat des Fehlers an Apple: bugreport.apple.com/web
Paul Solt

Antworten:

1507

Versuche dies:

1- Öffnen Sie im Xcode-Menü: Produkt> Schema> Schema bearbeiten

2- Auf Ihre Umgebungsvariablen setzen Sie OS_ACTIVITY_MODE=disable

Bildschirmfoto

iDevzilla
quelle
25
Es funktioniert auch mit Xcode 8.0, daher schlage ich vor, dass es die Lösung ist.
Nadein
27
Für alle, die sich fragen, wie sie zu diesem Bildschirm gelangen, müssen Sie zu Produkt> Schema> Schema bearbeiten oder Cmd + <
chrishale
46
@iDevzilla, Es gibt ein Problem mit dieser Lösung. Sie entfernt einige wichtige Elemente aus dem Protokoll, wenn Sie ein echtes Gerät verwenden, z. B. selbst protokollierte Daten. Bitte überblicken Sie es noch einmal. Ich bin mir nicht sicher, ob es die idealste Lösung ist.
Itai Spector
104
Leider verbirgt diese Option alle NSLogs vor einem echten Gerät für mich ...
Dmitry Isaev
8
Das Problem tritt nur in Simulator auf. Persönlich halte ich es nicht für eine gute Idee, die Umgebungsvariable hinzuzufügen, da sie auch wichtige Protokolle wie Probleme mit Layoutbeschränkungen und unter anderem das Beispiel von @ AirXygène verbirgt. Im Simulator können Sie auch "CMD + /" drücken, um die Konsole zu öffnen. Sie erhalten die altmodischen Protokolle. Hoffentlich wird Apple dieses Problem in Xcode beheben, es besteht jedoch großes Interesse daran, die Anzahl der Upvotes zu überprüfen;)
Bocaxica
360

Aufbauend auf dem ursprünglichen Tweet von @rustyshelf und der illustrierten Antwort von iDevzilla ist hier eine Lösung, die das Rauschen des Simulators stummschaltet, ohne die NSLog-Ausgabe vom Gerät zu deaktivieren.

  1. Setzen Sie unter Produkt> Schema> Schema bearbeiten ...> Ausführen (Debuggen) die Umgebungsvariable OS_ACTIVITY_MODE auf $ {DEBUG_ACTIVITY_MODE}, sodass dies folgendermaßen aussieht:

Geben Sie hier die Bildbeschreibung ein

  1. Gehen Sie zu Ihren Projekterstellungseinstellungen und klicken Sie auf +, um eine benutzerdefinierte Einstellung mit dem Namen DEBUG_ACTIVITY_MODE hinzuzufügen. Erweitern Sie diese Einstellung und klicken Sie auf das + neben Debug, um einen plattformspezifischen Wert hinzuzufügen. Wählen Sie das Dropdown-Menü aus und ändern Sie es in "Beliebiger iOS-Simulator". Setzen Sie dann den Wert auf "Deaktivieren", damit er folgendermaßen aussieht:

Geben Sie hier die Bildbeschreibung ein

cduhn
quelle
6
@NSNoob stellen Sie sicher, dass die env-Variable kein Leerzeichen enthält.
Sbarow
7
Schade, dass dies nicht die akzeptierte Antwort ist und schade, dass diese Antwort die Anzahl der Stimmen verliert. Viel bessere Antwort IMHO, da nur OS_ACTIVITY_MODE für DEBUG deaktiviert ist, das auf dem Simulator aufbaut.
Swany
18
Dies hat bei mir nicht funktioniert und die am besten gewählte Antwort auch nicht. Verwenden von Xcode 8.2.1 unter OS X 10.11.6 El Capitan. Was jedoch funktioniert hat, war eine Kombination dieser Antwort und der von BaseZen, bei der OS_ACTIVITY_DT_MODE anstelle von OS_ACTIVITY_MODE verwendet wurde. (Und unerwartet für mich haben zumindest "NEIN" und "Deaktivieren" die grassierende Protokollierung ausgeschaltet.)
RenniePet
1
@RenniePet, genau das hat es für mich getan. Vielen Dank!
Mischa
8
Diese Lösung blendet alle NSLog ab Xcode 9 aus. Um NSLog beizubehalten, ersetzen Sie disabledurch default.
Cœur
88

OS_ACTIVITY_MODE nicht für mich Arbeit (es kann gewesen sein , weil ich typo'd disablewie disabled, aber ist das nicht mehr natürlich?!?), Oder zumindest nicht sehr viel von Nachrichten verhindert hat. Hier ist also der eigentliche Umgang mit den Umgebungsvariablen.

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);
}

So Einstellung OS_ACTIVITY_DT_MODEauf „NEIN“ in den Umgebungsvariablen (GUI - Methode in den Schemata erklärt Screenshot in Haupt-Antwort) macht es für mich arbeiten.

Was NSLogden Speicherplatz für Systemmeldungen, Fehler und Ihr eigenes Debugging angeht: Wahrscheinlich ist ohnehin ein echter Protokollierungsansatz erforderlich, z . B. https://github.com/fpillet/NSLogger .

ODER

Trinken Sie die neue Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Es ist nicht überraschend, dass es nach der Überholung des gesamten Systems einige Probleme gibt Protokollierungs-API.

NACHTRAG

Wie auch immer, NSLogist nur eine Unterlegscheibe:

https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/

NSLog / CFLog

NSLog ist in den meisten Fällen nur noch ein Shim für os_log.

Es ist jetzt nur sinnvoll, die Quelle für die andere env-Variable anzugeben. Ein ziemlich unterschiedlicher Ort, diesmal von Apple-Interna. Ich bin mir nicht sicher, warum sie sich überlappen. [Falscher Kommentar zu NSLogentfernt]

[Bearbeitet am 22. September]: Ich frage mich, was "Release" und "Stream" anders machen als "Debug". Nicht genug Quelle.

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;
    }
}
BaseZen
quelle
11
Es ist immer schön, eine Antwort zu sehen, die Gründe und Hintergrundinformationen liefert und nicht nur die schnelle Lösung.
Jscs
Arbeitete diese Antwort mit OS_ACTIVITY_DT_MODE = NO
Almas Adilbek
1
Erzeugt dies ein anderes Verhalten als OS_ACTIVITY_MODE = disable? Gibt es einen Grund, diese Lösung zu bevorzugen?
n8gray
1
Es tut nicht. Es verbirgt alles.
Durazno
2
@Frizlab Ja, ich erwähne beide in meinem Beitrag. Siehe das "ODER" ... Ich bezeichne os_loginformell als das neue Kool Aid.
BaseZen
64

Ein Tweet hatte die Antwort für mich - https://twitter.com/rustyshelf/status/775505191160328194

Um zu verhindern, dass sich der Xcode 8 iOS Simulator wie verrückt protokolliert, setzen Sie eine Umgebungsvariable OS_ACTIVITY_MODE = disable in Ihrem Debug-Schema.

Es funktionierte.

Peter Smith
quelle
6
Wie bereits gesagt: Die Deaktivierung OS_ACTIVITY_MODE = deaktiviert alle anderen Protokollierungen mit einem NSLog.
Dzensik
5
Diese Lösung blendet alle NSLog ab Xcode 9 aus. Um NSLog beizubehalten, ersetzen Sie disabledurch default.
Cœur
34

Bitte finden Sie die folgenden Schritte.

  1. Wählen Sie Produkt => Schema => Schema bearbeiten oder verwenden Sie die Verknüpfung: CMD + <
  2. Wählen Sie die RunOption auf der linken Seite.
  3. Fügen Sie im Abschnitt Umgebungsvariablen die Variable OS_ACTIVITY_MODE = disable hinzu

Weitere Informationen finden Sie in der folgenden GIF-Darstellung.

Schema bearbeiten

Ramkrishna Sharma
quelle
3
Warten Sie ... Beim zweiten Lauf hat es funktioniert. Ein großes Lob für Gif Video. Die besten Antworten sind immer unten!
Eonist
2
Diese Lösung blendet alle NSLog ab Xcode 9 aus. Um NSLog beizubehalten, ersetzen Sie disabledurch default.
Cœur
33

Dies ist in Xcode Version 8.0 Beta 2 (8S162m) für mich immer noch nicht behoben, und zusätzliche Protokolle werden auch in der Xcode-Konsole angezeigt

** BEARBEITEN 8/1/16: Dies wurde in den Versionshinweisen für Xcode 8 Beta 4 (8S188o) als ein Problem bestätigt, das weiterhin besteht .

Bekannte Probleme in Xcode 8 Beta 4 - IDE

Debuggen

• Die Xcode Debug Console zeigt beim Debuggen von Anwendungen im Simulator eine zusätzliche Protokollierung von Systemframeworks an. (27331147, 26652255)

Vermutlich wird dies durch die GM-Veröffentlichung behoben. Bis dahin ist Geduld und obwohl nicht ideal, aber eine Problemumgehung, die ich verwende, unten ...

Ähnlich wie bei der vorherigen Antwort muss ich:

  • Stellen Sie meinen Druckprotokollen ein Sonderzeichen voran (z. B. * oder ^ oder! etc etc)

  • Verwenden Sie dann das Suchfeld unten rechts im Konsolenbereich, um meine Konsolenprotokolle zu filtern, indem Sie mein ausgewähltes Sonderzeichen eingeben, damit die Konsole meine Druckprotokolle wie vorgesehen anzeigt

Konsole

Pez
quelle
1
@SimplyLearning finden Sie diese Informationen überall auf Twitter. Sie können aber auch diese offizielle Website von Apple besuchen: developer.apple.com/news oder deren Newsfeed, um Updates zu erhalten, wenn sie veröffentlicht werden: developer.apple.com/news/rss/news.rss Übrigens: Dies scheint immer noch so zu sein sei ein Problem in Xcode Beta 3.
Benrudhart
50
Ich habe gerade Xcode 8 GM erhalten und das Problem besteht weiterhin. Sehr nervig!!
AdamM
8
Gerade Xcode Version 8.0 (8A218a) aus dem App Store heruntergeladen. Das Problem ist immer noch da.
Statik
4
Einfach lächerlich. Immer noch da in der endgültigen MAS-Version.
Shai Mishali
1
Wir verwenden ein Tag-Präfix zum Filtern. Einige Probleme sind: Mehrere Zeilen zeigen nur die erste an. Wenn Sie lldb zum Debuggen verwenden, müssen Sie die Filterung umschalten. Wirklich sehr, sehr traurig, dass die Konsole ab heute extrem begrenzt ist. Wir haben eine App für anständiges Filtern, aber wir müssen von der Konsole kopieren / einfügen. Wie traurig.
BauerMusic
23

Meine Lösung besteht darin, den Debugger-Befehl und / oder die Protokollnachricht in Haltepunkten zu verwenden.

Geben Sie hier die Bildbeschreibung ein

Ändern Sie die Ausgabe der Konsole von Alle Ausgaben in Debugger- Ausgaben wie

Geben Sie hier die Bildbeschreibung ein

mrahmiao
quelle
14

In Ordung. Es scheint viel Aufregung in diesem Fall zu geben, also gebe ich Ihnen eine Möglichkeit, es beizubehalten, ohne diesen Schema-Trick anzuwenden. Ich werde speziell auf den iOS-Simulator eingehen, dies muss jedoch möglicherweise auch für den TV-Sim angewendet werden, der sich in einem anderen Verzeichnis befindet.

Das Problem, das all diese Dinge verursacht, sind Listen im Xcode-Verzeichnis. Beim Start des Sim wird ein Prozess namens configd_sim gestartet , der die Plists einliest und Debugging-Informationen druckt, wenn die Plists angeben, dass sie protokolliert werden sollen.

Die Plisten befinden sich hier:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems

Wenn Sie mit einer Beta herumspielen, beachten Sie, dass das Verzeichnis anders sein wird.

In diesem Verzeichnis sehen Sie zahlreiche Listen. Erstellen und führen Sie jetzt Ihre Anwendung aus und beobachten Sie die Protokolle. Sie suchen nach dem Inhalt, dem das Subsystem unmittelbar folgt : part. Es ist der unmittelbar darauf folgende Name, der die entsprechende problematische Liste darstellt.

Geben Sie hier die Bildbeschreibung ein

Ändern Sie von dort aus entweder die Liste, um den Debugging-Schlüssel / -Wert [Level] auszuschalten, bei dem es sich um ein Wörterbuch handelt, das das enthält "Enable" => "Default" Schlüssel / Wert enthält ... oder löschen Sie einfach die Liste. Beachten Sie, dass Sie root sein müssen, um eine dieser Aktionen auszuführen, da sie sich in der Xcode-Anwendung befinden.

Der plutil -pBefehl kann auch für Sie von Nutzen sein. dh

plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist

Dies gab mir eine der problematischen Listen, die enthielten:

{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}

Viel Glück :]

Sozins Komet
quelle
Ich habe gezippt und dann gelöscht, falls ich wiederherstellen muss.
Dandan78
1
Ich fand, dass dies nicht in der Lage war, viel Netzwerkcode zum Schweigen zu bringen, wahrscheinlich weil ihm ein Subsystemname fehlt:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen
@BaseZen Leider habe ich nur die Frage des OP angesprochen, die keine Probleme mit der TCP-Protokollierung enthielt. Sie können einen neuen SO-Beitrag erstellen, wenn Sie Hilfe bei der Behebung dieses Problems benötigen.
Sozins Komet
13

Dies hängt mit einem bekannten Problem bei der Protokollierung zusammen, das in den Xcode 8 Beta-Versionshinweisen enthalten ist (auch von einem Techniker bei WWDC gefragt).

Beim Debuggen von WatchOS-Anwendungen im Watch-Simulator kann das Betriebssystem zu viele nicht hilfreiche Protokolle erstellen. (26652255)

Derzeit ist keine Problemumgehung verfügbar. Sie müssen auf eine neue Version von Xcode warten.

EDIT 7/5/16: Dies ist angeblich ab Xcode 8 Beta 2 behoben:

In Xcode 8 Beta 2 - IDE behoben

Debuggen

  • Beim Debuggen einer App im Simulator werden Protokolle angezeigt. (26457535)

Versionshinweise zu Xcode 8 Beta 2

JAL
quelle
Das habe ich auch gedacht, aber ich benutze weder eine watchOS-Anwendung noch einen watchOS-Simulator. Aber es könnte auch anderen Sims passieren. Halten Sie es vorerst an und prüfen Sie, ob eine bestimmte Xcode 8 Beta das Problem in den nächsten Wochen / Monaten beheben wird.
Hans Knöchel
@ HansKnoechel bin ich auch nicht, aber ich kann bestätigen, dass dieses Problem bei jeder Anwendung auftritt. Kein "offizielles" Wort von Apple außer den Versionshinweisen und einigen Diskussionen auf der WWDC.
JAL
danke gleich hier! Wir sollten morgen während der WWDC darüber sprechen, hehe :-)
Hans Knöchel
Passiert auch für meinen iPhone 5s Simulator, wahrscheinlich alle Simulatoren.
SimplGy
Ich konnte trotz der Anmeldung
SimplGy
7

Dies ist in xcode 8.1 (getestete Beta-Version 8.1 (8T46g)) kein Problem mehr . Sie können die OS_ACTIVITY_MODEUmgebungsvariable aus Ihrem Schema entfernen .

https://developer.apple.com/go/?id=xcode-8.1-beta-rn

Debuggen

• Die Xcode Debug Console zeigt beim Debuggen von Anwendungen im Simulator keine zusätzliche Protokollierung mehr von Systemframeworks an. (26652255, 27331147)

mriddle89
quelle
20
Ich bekomme immer noch viel falsche Anmeldung in 8.1. Meistens komisches Socket- und TCP-Verbindungsmaterial. Sonst noch jemand oder nur ich?
Jordan Smith
3
Ich habe heute (31.10.2016) gerade Xcode 8.1 heruntergeladen und sehe immer noch einige Debugging-Protokolle wie diese [MC] Reading from private effective user settings.aus einem leeren neuen Dummy-Projekt. Datei> Neu> Projekt.
Zhang
4

In Xcode 10 schaltet die OS_ACTIVITY_MODEVariable mit disable(oder default) Wert auch das aus, NSLogegal was passiert.

Wenn Sie also das Konsolenrauschen, aber nicht Ihre eigenen Protokolle printf("")entfernen möchten , können Sie das gute alte anstelle des NSLog ausprobieren, da es nicht vom OS_ACTIVITY_MODE= betroffen ist disable.

Schauen Sie sich aber besser die neue os_logAPI hier an .

Jakub Truhlář
quelle
1

Diese Lösung hat bei mir funktioniert:

  1. Führen Sie die App im Simulator aus
  2. Öffnen Sie das Systemprotokoll ( + /)

Dadurch werden alle Debug-Daten und auch Ihre NSLogs ausgegeben.

So filtern Sie nur Ihre NSLog-Anweisungen:

  1. Stellen Sie jeweils ein Symbol voran, zum Beispiel: NSLog(@"^ Test Log")
  2. Filtern Sie die Ergebnisse mithilfe des Suchfelds oben rechts, "^" im obigen Fall

Das sollten Sie bekommen:

Screenshot der Konsole

psobko
quelle