gpt4 book ai didi

c - 如何调试用 cgo 调用的 C 代码?

转载 作者:IT王子 更新时间:2023-10-29 01:12:32 26 4
gpt4 key购买 nike

背景

我目前正在为此 library 编写 Go 接口(interface).

作为第一步,我尝试通过 Go 包装器调用它们来运行 /test/test_pc.c 中的测试。重要的是要注意,通过 GCC 编译时测试是成功的。

重要的附加细节:值得一提的是,目前我拥有所有要在 import "C" 上运行的 C 代码。这是因为 relic_test.h 没有提供函数原型(prototype),因此 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 或其他日志记录的自由应用。

这两个选项都不是很好...

This document has a section on cgo debugging似乎表明它工作正常。

关于c - 如何调试用 cgo 调用的 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45328414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com