Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调试使用cgo调用的C代码?_C_Debugging_Go_Cgo_Gccgo - Fatal编程技术网

如何调试使用cgo调用的C代码?

如何调试使用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(){

背景

我目前正在为此编写Go接口

作为第一步,我试图通过Go wrappers调用
/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调用。

一些调查显示,您唯一的实际选择如下:

  • GDB。Go程序应该与GDB配合得很好,但GDB和cgo可能无法相处。我认为这将在*NIX系统上工作,但Windows可能会也可能不会合作。试试看
  • 自由应用良好的ol
    printf
    或其他日志记录
  • 这两个选项都不是很好


    似乎表明它工作正常。

    如果你知道如何使用GDB,你不能用它调试go程序吗?在delve成为公认的解决方案之前,。我认为go甚至还附带了一些GDB支持脚本……最简单的解决方案通常是自由应用
    printf