背景
我目前正在为这个库编写一个 Go 接口。
作为第一步,我试图/test/test_pc.c
通过 Go 包装器调用它们来运行测试。重要的是要注意,当由 GCC 编译时,测试是成功的。
重要的附加细节:值得一提的是,目前我已经拥有了我想要在上面运行的所有 C 代码import "C"
。原因是relic_test.h
不提供函数原型,因此 cgo 无法通过调用来识别函数,例如C.foo()
. 因此,我把所有的test_pc.c
代码都放在了下面的格式中:
package main
// #include<>
/*
void test1(){}
void test2(){}
.
.
void testN(){}
*/
import "C"
func main(){
C.test1()
C.testN()
}
问题
当我尝试从 go 中运行它们时,在一个特定的测试中执行会“卡住”(即代码正在执行中,但它只是简单地没有转到下一条指令)。如何找出代码卡住的原因?如何观察程序的执行流程?
我试过的东西
同样,如果我尝试直接使用 C(即,如果我用 GCC 编译并运行它),代码就可以工作。因此,GDB 也将起作用。我也尝试过使用go tools cgo -debug-gcc
,但这只会打印预处理指令。go tools cgo -gccgo
不输出任何东西。最后,Go 调试器 Delve 无法调试 C 调用。