php小編草莓為您帶來了一個令人意外的工具-VS Code調試器。作為一款功能強大的程式碼編輯器,VS Code的偵錯器功能提供了便捷的偵錯工具,幫助開發者更快速地定位和解決程式碼中的問題。無論是單步調試、斷點調試還是查看變數值,VS Code調試器都能給予準確的回饋和提示,大大提升了開發效率。讓我們一起來探索這個令人驚喜的調試器吧!
我有這個函數來偵測四面體的體積是否幾乎為零,即它是否是平的:
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 }
我使用這四個輸入點單步執行程式碼:
{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}
透過 vs code 偵錯器單步執行程式碼表示局部變數具有以下值:
偵錯器顯示的值沒有意義。 denom
和 tolerance
如何成為 0
?對我來說完全是無稽之談。我錯過了什麼嗎?
這是顯示該問題的示範的簡化版本:
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 }
這是 delve 偵錯會話的輸出:
(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
您會看到指令 0x4608de
被選為 :7
行的斷點。此時,變數a
和b
還沒有得到它們的值(a
稍後在指令0x4608e2
處取得值,而b
在0x4608e7
處取得值)。
這就是為什麼您一開始沒有獲得正確的值,後來它會「自行修復」。
此問題已報告為cmd/compile:變數 #58813 的 dwarf 位置錯誤一个>.
以上是意外的 VS Code 偵錯器值的詳細內容。更多資訊請關注PHP中文網其他相關文章!