簡體   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