Ich versuche gerade, schnell zu lernen, und während ich etwas Dummy-Zeug schrieb, bemerkte ich, dass der xcode einige Zeilen überspringt und manchmal auf merkwürdigen Linien stoppt. mein env: macos sierra, Xcode Version 8.2.1 (8C1002)Warum überspringt lldb diese Zeile?
da Xcode einige Zeilen überspringt, dachte ich, das Problem von Code-Optimierung ist, dann wechselte ich zu debuggen zum Terminal, unterhalb der Eingang & Ausgang ist
I zusammengestellt
swiftc -g -Onone *.swift
dann
Last mit LLDB mit
lldb main
Satz Haltepunkt auf Flusen 18, wie unten und Prozess ausgeführt mit „r“
17 do {
-> 18 try StaticM.teststatic2()
19 print (1)
20 }catch {
21
(lldb) thread step-in
Process 963 stopped
* thread #1: tid = 0x86e1, 0x0000000100001f6a main`static StaticM.teststatic2(self=main.StaticM, $error=Error @ 0x00007fff5fbffac0) throws ->() + 26 at staticExt.swift:13, queue = 'com.apple.main-thread', stop reason = step in
frame #0: 0x0000000100001f6a main`static StaticM.teststatic2(self=main.StaticM, $error=Error @ 0x00007fff5fbffac0) throws ->() + 26 at staticExt.swift:13
10 public extension StaticM {
11 @discardableResult
12 public static func teststatic2() throws {
-> 13 var asdf=2;
14 let sdfgsdfg=2;
15 print(sdfgsdfg);
16 print (asdf);
(lldb) n
Process 963 stopped
* thread #1: tid = 0x86e1, 0x0000000100001f72 main`static StaticM.teststatic2(self=main.StaticM, $error=Error @ 0x00007fff5fbffac0) throws ->() + 34 at staticExt.swift:15, queue = 'com.apple.main-thread', stop reason = step over
frame #0: 0x0000000100001f72 main`static StaticM.teststatic2(self=main.StaticM, $error=Error @ 0x00007fff5fbffac0) throws ->() + 34 at staticExt.swift:15
12 public static func teststatic2() throws {
13 var asdf=2;
14 let sdfgsdfg=2;
-> 15 print(sdfgsdfg);
16 print (asdf);
17 asdf += 1;
18 }
(lldb) process continue
Process 963 resuming
2
2
1
Process 963 exited with status = 0 (0x00000000)
(lldb)
gezeigt Frage, nachdem ich zur nächsten Zeile unter Verwendung von „n“ in LLDB gehen, warum LLDB überspringt 14 von staticExt.swift Leitung und springt direkt auf Linie 15?
auch, manchmal beim Versuch, ein anderes Programm zu debuggen, klicke ich auf "step-in" in xcode, es stoppt auf der Deklarationszeile des func statt der ersten Zeile im Codeblock, ich klickte Stepover, es geht zurück in die Caller-Func-Zeile, anstatt die erste Zeile dieser Funktion auszuführen.
in allem, programme funktioniert, aber warum lldb springt sogar mit -Onone und -g? können Sie bitte lassen Sie mich wo finde ich weitere Informationen? vielen Dank.
Danke Jim.That wirklich hilft .kann ich annehmen, dass swiftc macht auch ein paar andere Tricks, wie ich einige andere seltsame Dinge erlebt, wie es nicht auf der ersten Zeile in der Func-Block stoppen, stattdessen bricht es auf Funcline erklären? Wo finde ich was macht swiftc? Danke – user3299264
Das scheint wahrscheinlich.Es gibt keinen einzigen Ort, an dem das Verhalten des Optimierers bei -Onone beschrieben wird, und der "Optimierer" ist sowieso keine Einheit, es ist eine Reihe separater Pässe, die jeweils versuchen, ihre eigenen Aufgaben zu erledigen. Sie können die "Linientabelle" sehen, die in den Debug-Informationen mit dem lldb-Befehl 'image dump linientabelle MySource.swift' enthalten war, aber das sagt Ihnen nur, welche Informationen der Debugger hat, nicht warum der Swift-Compiler entschieden hat, ihn zu umrahmen dieser Weg. –