SIGTRAP:Golang包装C库中的跟踪陷阱错误,但仅在运行go测试时发生

SIGTRAP:Golang包装C库中的跟踪陷阱错误,但仅在运行go测试时发生,c,go,cryptography,bitcoin,ecdsa,C,Go,Cryptography,Bitcoin,Ecdsa,我已经建立了一个最小的代码库repo来复制错误,并尽可能清楚地解释这个错误: 我目前正在做一个项目,使用一个打包了ECDSA的Go包进行ECDSA签名 如果我通过导入go-secp256k1中的函数(如main.go中所示)来直接使用这些函数,它就可以正常工作。因此,在回购协议中,运行main.go工作得很好,并打印出公钥 所以这里有一个奇怪的错误:如果我尝试使用go-secp256k1为包编写测试,我会收到一个奇怪的错误。要复制,请运行: go test github.com/soroushj

我已经建立了一个最小的代码库repo来复制错误,并尽可能清楚地解释这个错误:

我目前正在做一个项目,使用一个打包了ECDSA的Go包进行ECDSA签名

如果我通过导入go-secp256k1中的函数(如main.go中所示)来直接使用这些函数,它就可以正常工作。因此,在回购协议中,运行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包装程序运行到此错误?

简单地从go 1.4更新到1.3就解决了我在OS X Mavericks上遇到的问题。golang.org上的Go安装程序将在安装1.4时删除任何旧版本的Go,以防万一,你能用race detector运行整个程序吗?没有太多的期待,但没有伤害。另一个猜想是C代码中的某些东西是不可重复的,测试是以某种方式触发的。考虑把它放在最核心的人身上,阅读它不会频繁出现堆栈溢出。“KothIX好主意,我刚发布它,将在这里发布任何解决方案。”我没有得到你看到的错误,至少在OSX上是这样。你能确保你拥有最新版本的依赖项吗?@JimB非常感谢你,从1.3升级到1.4,错误消失了。想知道确切的错误是什么,很高兴它被修复了。请随意添加更新Go的答案,我将标记为正确的解决方案: