繁体   English   中英

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

[英]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调用。

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

  1. GDB。 Go程序应该可以正常使用GDB,但是GDB和cgo可能不会相处。 我认为这将适用于* NIX系统,但Windows可能会也可能不会合作。 试试吧,看看?
  2. 自由应用好的ol printf或其他日志记录。

这些选项都不是很好......

这个文件有一个关于cgo调试的部分似乎表明它工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM