[英]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調用。
一些調查顯示您唯一的實際選擇如下:
printf
或其他日志記錄。 這些選項都不是很好......
這個文件有一個關於cgo調試的部分似乎表明它工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.