gpt4 book ai didi

c - SIGTRAP : trace trap error in Golang wrapping C library, 但仅在运行 go test 时

转载 作者:IT王子 更新时间:2023-10-29 02:24:11 26 4
gpt4 key购买 nike

我已经设置了一个最小的代码库 repo 来复制错误并尽可能清楚地解释这个错误:https://github.com/soroushjp/go_wrapper_c_err

我目前正在做一个使用 Go 包进行 ECDSA 签名的项目 go-secp256k1包装 C secp256k1 library .

如果我通过导入直接使用 go-secp256k1 中的函数(如在 main.go 中所见),它工作正常。所以在 repo 中,运行 main.go 效果很好,并打印出一个公钥。

所以这是一个奇怪的错误:如果我尝试使用 go-secp256k1 为一个包编写一个测试,我会收到一个奇怪的错误。要复制,请运行:

go test github.com/soroushjp/go_wrapper_c_err/cryptoutil -v

我收到的错误:

=== RUN TestNewPublicKey
SIGTRAP: trace trap
PC=0x4031730
signal arrived during cgo execution

goroutine 20 [syscall]:
runtime.cgocall(0x40013d0, 0x436ddd0)
/usr/local/go/src/pkg/runtime/cgocall.c:143 +0xe5 fp=0x436ddb8 sp=0x436dd70
github.com/toxeus/go-secp256k1._Cfunc_secp256k1_start(0x404c14d)
github.com/toxeus/go-secp256k1/_obj/_cgo_defun.c:99 +0x31 fp=0x436ddd0 sp=0x436ddb8
github.com/toxeus/go-secp256k1.Start()
/Users/soroushjp/Desktop/Dropbox/Development/go/src/github.com/toxeus/go-secp256k1/secp256k1.go:9 +0x1a fp=0x436ddd8 sp=0x436ddd0
github.com/soroushjp/go_wrapper_c_err/cryptoutil.NewPublicKey(0xc20800e080, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0)
/Users/soroushjp/go/src/github.com/soroushjp/go_wrapper_c_err/cryptoutil/cryptoutil.go:35 +0xbd fp=0x436de98 sp=0x436ddd8
github.com/soroushjp/go_wrapper_c_err/cryptoutil.TestNewPublicKey(0xc20804c090)
/Users/soroushjp/go/src/github.com/soroushjp/go_wrapper_c_err/cryptoutil/cryptoutil_test.go:10 +0x5f fp=0x436df68 sp=0x436de98
testing.tRunner(0xc20804c090, 0x420e110)
/usr/local/go/src/pkg/testing/testing.go:422 +0x8b fp=0x436df98 sp=0x436df68
runtime.goexit()
/usr/local/go/src/pkg/runtime/proc.c:1445 fp=0x436dfa0 sp=0x436df98
created by testing.RunTests
/usr/local/go/src/pkg/testing/testing.go:504 +0x8db

goroutine 16 [chan receive]:
testing.RunTests(0x418fe08, 0x420e110, 0x1, 0x1, 0x1)
/usr/local/go/src/pkg/testing/testing.go:505 +0x923
testing.Main(0x418fe08, 0x420e110, 0x1, 0x1, 0x4216960, 0x0, 0x0, 0x4216960, 0x0, 0x0)
/usr/local/go/src/pkg/testing/testing.go:435 +0x84
main.main()
github.com/soroushjp/go_wrapper_c_err/cryptoutil/_test/_testmain.go:47 +0x9c

goroutine 19 [finalizer wait]:
runtime.park(0x401c710, 0x4231e98, 0x4215dc9)
/usr/local/go/src/pkg/runtime/proc.c:1369 +0x89
runtime.parkunlock(0x4231e98, 0x4215dc9)
/usr/local/go/src/pkg/runtime/proc.c:1385 +0x3b
runfinq()
/usr/local/go/src/pkg/runtime/mgc0.c:2644 +0xcf
runtime.goexit()
/usr/local/go/src/pkg/runtime/proc.c:1445

goroutine 17 [syscall]:
runtime.goexit()
/usr/local/go/src/pkg/runtime/proc.c:1445

rax 0x4031720
rbx 0xc208018d80
rcx 0xc208002a20
rdx 0x0
rdi 0x4403a90
rsi 0xc208002a20
rbp 0xb0103e30
rsp 0xb006efc0
r8 0x1
r9 0x3f
r10 0x3
r11 0x7fffffffffffffff
r12 0x7fff74c4e420
r13 0x1b8f53c9daf8
r14 0x4403a78
r15 0x4403a30
rip 0x4031730
rflags 0x246
cs 0x2b
fs 0x0
gs 0x0
exit status 2
FAIL github.com/soroushjp/go_wrapper_c_err/cryptoutil 0.016s

我的测试代码非常少,几乎与 main.go 中的代码相同:

package cryptoutil

import (
"fmt"
"testing"
)

func TestNewPublicKey(t *testing.T) {
privateKey := NewPrivateKey()
publicKey, err := NewPublicKey(privateKey)
if err != nil {
t.Error(err)
}
fmt.Println(publicKey)
}

知道这里发生了什么吗? “go test”和“go run”之间发生了什么不同导致 ECDSA 包装器遇到此错误?

最佳答案

从 1.3 简单地从 Go 1.4 更新解决了我在 OS X Mavericks 上的问题。 golang.org 上的 Go 安装程序将在安装 1.4 时删除任何旧版本的 Go

关于c - SIGTRAP : trace trap error in Golang wrapping C library, 但仅在运行 go test 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27439942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com