Heim >Backend-Entwicklung >Golang >Unerwarteter VS-Code-Debugger-Wert
Der
php-Editor Strawberry bringt Ihnen ein unerwartetes Tool – den VS Code-Debugger. Als leistungsstarker Code-Editor bietet die Debugger-Funktion von VS Code praktische Debugging-Tools, mit denen Entwickler Probleme im Code schneller lokalisieren und lösen können. Ganz gleich, ob es sich um Einzelschritt-Debugging, Breakpoint-Debugging oder die Anzeige von Variablenwerten handelt, der VS Code-Debugger kann genaue Rückmeldungen und Eingabeaufforderungen geben und so die Entwicklungseffizienz erheblich verbessern. Lassen Sie uns gemeinsam diesen erstaunlichen Debugger erkunden!
Ich habe diese Funktion, um zu erkennen, ob das Volumen eines Tetraeders fast Null ist, d. h. ob es flach ist:
import ( "math" v3 "github.com/deadsy/sdfx/vec/v3" ) // mathematica script is available here: // https://math.stackexchange.com/a/4709610/197913 func iszerovolume(a, b, c, d v3.vec) (bool, float64) { ab := b.sub(a) ac := c.sub(a) ad := d.sub(a) // note that the `norm` function of mathematica is equivalent to our `length()` function. nab := ab.length() ncd := ac.sub(ad).length() nbd := ab.sub(ad).length() nbc := ab.sub(ac).length() nac := ac.length() nad := ad.length() // check for 0 edge lengths if nab == 0 || ncd == 0 || nbd == 0 || nbc == 0 || nac == 0 || nad == 0 { return true, 0 } volume := 1.0 / 6.0 * math.abs(ab.cross(ac).dot(ad)) denom := (nab + ncd) * (nac + nbd) * (nad + nbc) // tolerance derived from here: // https://math.stackexchange.com/a/4709610/197913 tolerance := 480.0 rho := tolerance * volume / denom return rho < 1, volume }
Ich verwende diese vier Eingabepunkte, um den Code schrittweise durchzugehen:
{X: -1.572793602943422, Y: -4.157202807477221, Z: 5.603983008116483} {X: -2.45160644054413, Y: -3.4214927673339854, Z: 6.135950530673543} {X: -2.45160644054413, Y: -3.7163730403986044, Z: 5.603983008116483} {X: -1.572793602943422, Y: -3.5355907043553003, Z: 6.482795845717191}
Ein schrittweises Durchgehen des Codes mit dem vs-Code-Debugger zeigt, dass die lokale Variable die folgenden Werte hat:
Die vom Debugger angezeigten Werte ergeben keinen Sinn. denom
和 tolerance
如何成为 0
? Für mich völliger Unsinn. Habe ich etwas verpasst?
Hier ist eine vereinfachte Version der Demo, die das Problem zeigt:
1 package main 2 3 func main() { 4 a := f(1) 5 b := 1 6 7 c := a < b 8 _ = c 9 } 10 11 func f(i int) int { 12 if i > 0 { 13 return i 14 } 15 return -i 16 }
Dies ist die Ausgabe der Delve-Debugging-Sitzung:
(dlv) b 7 Breakpoint 2 set at 0x4608de for main.main() ./main.go:7 (dlv) c > main.main() ./main.go:7 (hits goroutine(1):1 total:1) (PC: 0x4608de) 2: 3: func main() { 4: a := f(1) 5: b := 1 6: => 7: c := a < b 8: _ = c 9: } 10: 11: func f(i int) int { 12: if i > 0 { (dlv) locals a = 824633745824 b = 824633843808 (dlv) disass TEXT main.main(SB) /home/zeke/src/temp/76380802/main.go main.go:3 0x4608c0 493b6610 cmp rsp, qword ptr [r14+0x10] main.go:3 0x4608c4 7639 jbe 0x4608ff main.go:3 0x4608c6 4883ec28 sub rsp, 0x28 main.go:3 0x4608ca 48896c2420 mov qword ptr [rsp+0x20], rbp main.go:3 0x4608cf 488d6c2420 lea rbp, ptr [rsp+0x20] main.go:4 0x4608d4 b801000000 mov eax, 0x1 main.go:4 0x4608d9 e842000000 call $main.f => main.go:7 0x4608de* 4883f801 cmp rax, 0x1 main.go:4 0x4608e2 4889442418 mov qword ptr [rsp+0x18], rax main.go:5 0x4608e7 48c744241001000000 mov qword ptr [rsp+0x10], 0x1 main.go:7 0x4608f0 0f9c44240f setl byte ptr [rsp+0xf] main.go:9 0x4608f5 488b6c2420 mov rbp, qword ptr [rsp+0x20] main.go:9 0x4608fa 4883c428 add rsp, 0x28 main.go:9 0x4608fe c3 ret main.go:3 0x4608ff 90 nop main.go:3 0x460900 e83bccffff call $runtime.morestack_noctxt main.go:3 0x460905 ebb9 jmp $main.main
Sie werden die Anweisung sehen 0x4608de
被选为 :7
行的断点。此时,变量a
和b
还没有得到它们的值(a
稍后在指令0x4608e2
处获取值,而b
在0x4608e7
den Wert ermitteln).
Daher bekommt man zunächst nicht den richtigen Wert, später „repariert“ es sich von selbst.
Dieses Problem wurde als cmd/compile: Falsche Zwergposition für Variable #58813 一个>.
gemeldetDas obige ist der detaillierte Inhalt vonUnerwarteter VS-Code-Debugger-Wert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!