如何调试使用cgo调用的C代码?
背景 我目前正在为此编写Go接口 作为第一步,我试图通过Go wrappers调用如何调试使用cgo调用的C代码?,c,debugging,go,cgo,gccgo,C,Debugging,Go,Cgo,Gccgo,背景 我目前正在为此编写Go接口 作为第一步,我试图通过Go wrappers调用/test/test_pc.c中的测试。重要的是要注意,当由GCC编译时,测试是成功的 重要的附加细节:值得一提的是,目前我已经拥有了我想要在上面运行的所有C代码import“C”。原因是relic_test.h没有提供函数原型,因此cgo不能通过调用C.foo()来识别函数。因此,我将所有的test_pc.c代码放在以下格式中: 主程序包 //#包括 /* void test1(){} void test2(){
/test/test_pc.c
中的测试。重要的是要注意,当由GCC编译时,测试是成功的
重要的附加细节:值得一提的是,目前我已经拥有了我想要在上面运行的所有C代码import“C”
。原因是relic_test.h
没有提供函数原型,因此cgo不能通过调用C.foo()
来识别函数。因此,我将所有的test_pc.c
代码放在以下格式中:
主程序包
//#包括
/*
void test1(){}
void test2(){}
.
.
void testN(){}
*/
输入“C”
func main(){
C.测试1()
C.testN()
}
问题
当我尝试从go运行它们时,在一个特定的测试中,执行会被“卡住”(即代码正在执行,但它只是不进入下一条指令)。
我怎样才能找出代码被卡住的原因?如何观察程序的执行流程
我试过的东西
同样,如果我尝试直接使用C(即,如果我用GCC编译它并运行它),代码会正常工作。因此,GDB也将起作用。
我也尝试过使用
go工具cgo-debug gcc
,但这只打印预处理指令<代码>go tools cgo-gccgo不输出任何内容。最后,Go调试器Delve无法调试C调用。一些调查显示,您唯一的实际选择如下:
printf
或其他日志记录似乎表明它工作正常。如果你知道如何使用GDB,你不能用它调试go程序吗?在delve成为公认的解决方案之前,。我认为go甚至还附带了一些GDB支持脚本……最简单的解决方案通常是自由应用
printf