2016-03-28 6 views
5

Um einen Apple Bug in xcode 7.3 zu umgehen, wo xcode explodiert, wenn man einige Breakpoints trifft, müssen wir entweder CLANG_ENABLE_MODULE_DEBUGGING ausschalten oder bei xcode 7.2 bleiben. Das Ausschalten von CLANG_ENABLE_MODULE_DEBUGGING klingt großartig.Ausschalten von CLANG_ENABLE_MODULE_DEBUGGING Konsequenzen

Was bedeutet es wirklich, CLang-Module in einer typischen iOS-Entwicklerarbeitsumgebung nicht debuggen zu können? Wie kann man wissen, auf welche CLang-Module es entweder direkt oder transitiv ankommt?

Hier ist eine Diskussion um dieses Thema sprengen: https://forums.developer.apple.com/message/126468#126468

Clang Module zu verstehen und

Hier Debugging ist ein Introduction to Objective-C Modules

Aus einer anderen Quelle Apple Releases Xcode 7 Beta dem Titel:

Clang-Module und vorkompilierte Header für C, C++, Objective-C und Objective-C++ enthalten Debuginformationen für die von ihnen definierten Typen. Wenn es mit dem Xcode Einstellung CLANG_ENABLE_MODULE_DEBUGGING Gebäude = YES (standardmäßig aktiviert), klirren speichert Verweise auf die Typen

ich ein paar unserer Cocoa Pods nachschauen @import, die im Zusammenhang scheint.

Was ist ein typisches Beispiel für Debug-Informationen, die wir damit nicht sehen würden?

+0

Ich kann nirgendwo online herausfinden, wie man CLANG_ENABLE_MODULE_DEBUGGING ausschaltet. Könnten Sie bitte erklären, wie oder einen Link zur Verfügung stellen? – FateNuller

+0

Ich erinnere mich nicht, wie durch xcode. Die Zeile befindet sich jedoch in WHATEVER_YOUR_PROJECT.xcodeproj/project.pbxproj XCBuildConfiguration-Abschnitt/* Debug */Build-Einstellungen. Aus irgendeinem Grund sehe ich es nicht durch xcode. – finneycanhelp

Antwort

5

Wenn das Debugging von Clam-Modulen aktiviert ist, generiert clang die Debug-Informationen für alle Typen in Modulen, die der Code jeweils in einen separaten Abschnitt der Debug-Informationen importiert, und dann können alle anderen Debug-Informationen verwendet werden Typen, die von diesem Modul kommen, indem sie in den Debug-Informationen auf den Abschnitt dieses Moduls zeigen.

Wenn das Modul Debugging deaktiviert ist, erhält jede Kompilierungseinheit (.c, .m oder .swift-Datei) eine Kopie aller verwendeten Typen und verweist lokal auf sie.

Wenn Sie diese Option aktivieren, kann die Größe der Debuginformationen für große Projekte reduziert werden.

Da Debug-Informationen ziemlich groß werden können, spielt der Compiler im "off" -Fall einige Tricks, um die Debug-Größe handhabbar zu halten. Zum Beispiel gibt clang nur benutzte Typen in die Debug-Informationen ein. Wenn also ein Typ aus einem Modul stammt, den niemand in Ihrem Programm verwendet, erhalten Sie keine Debug-Informationen für diesen Typ. Dies ist im Allgemeinen kein großes Problem, denn wenn Sie niemals einen Typ in Ihren Code eingeben, werden Sie ihn wahrscheinlich seltener beim Debuggen verwenden. Aber es kann manchmal Probleme verursachen.

Es gibt auch keine Signaturinformationen für Funktionen aus, die Ihr Programm verwendet, aber nicht definiert. Aus diesem Grund müssen Sie Rückgabetypen in Ausdrücken im Befehl "print" darstellen, die Sie in Ihrem Code nicht umsetzen müssen.

OTOH, wenn es "on" ist, da der Compiler weiß, dass es diese Information nur einmal erzeugen muss, kann es vollständiger darüber sein, was es aussendet.

Für Objective C können Sie alle fehlenden Typen/Funktion Signaturen umgehen, die aus Modulen, die Sie, indem Sie verwenden kommen:

(lldb) expr @import "FrameworkWhoseTypesOrSignaturesYouWant" 

am Anfang Ihrer Debug-Sitzung.