Rumah > Artikel > pembangunan bahagian belakang > Nilai penyahpepijat Kod VS yang tidak dijangka
editor php Strawberry membawakan anda alat yang tidak dijangka - penyahpepijat Kod VS. Sebagai editor kod yang berkuasa, fungsi penyahpepijat VS Code menyediakan alat penyahpepijatan yang mudah untuk membantu pembangun mencari dan menyelesaikan masalah dalam kod dengan lebih cepat. Sama ada penyahpepijatan satu langkah, penyahpepijatan titik putus atau melihat nilai pembolehubah, penyahpepijat Kod VS boleh memberikan maklum balas dan gesaan yang tepat, meningkatkan kecekapan pembangunan. Mari kita terokai penyahpepijat yang menakjubkan ini bersama-sama!
Saya mempunyai fungsi ini untuk mengesan jika isipadu tetrahedron hampir sifar, iaitu jika ia rata:
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 }
Saya menggunakan empat titik input ini untuk melangkah melalui kod:
{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}
Melangkah melalui kod melalui penyahpepijat kod vs menunjukkan bahawa pembolehubah tempatan mempunyai nilai berikut:
Nilai yang ditunjukkan oleh penyahpepijat tidak masuk akal. denom
和 tolerance
如何成为 0
? Semua karut kepada saya. Adakah saya terlepas sesuatu?
Berikut ialah versi ringkas demo yang menunjukkan masalah:
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 }
Ini adalah output daripada sesi penyahpepijatan 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
Anda akan melihat arahan mendapat nilai di 0x4608de
被选为 :7
行的断点。此时,变量a
和b
还没有得到它们的值(a
稍后在指令0x4608e2
处获取值,而b
在0x4608e7
).
Sebab itu anda tidak mendapat nilai yang betul pada mulanya, kemudian ia "membetulkan dirinya".
Isu ini telah dilaporkan sebagai cmd/compile: Lokasi kerdil yang salah untuk pembolehubah #58813 一个>.
Atas ialah kandungan terperinci Nilai penyahpepijat Kod VS yang tidak dijangka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!