[英]How can I debug C code called with cgo?
背景
我目前正在为这个库编写Go接口。
作为第一步,我试图通过Go包装器调用它们来在/test/test_pc.c
运行测试。 值得注意的是,GCC编译时测试成功。
重要的附加细节 :值得一提的是,目前我想要在import "C"
之上运行所有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调用。
一些调查显示您唯一的实际选择如下:
printf
或其他日志记录。 这些选项都不是很好......
这个文件有一个关于cgo调试的部分似乎表明它工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.