我正在通過 SWIG 使用來自 Go 的 C++ 庫。SWIG 不負責內存管理,因此 Go 端看起來像這樣:f := NewFoo()
defer DeleteFoo(f)DeleteFoo(f)當我創建時調用f它很容易,但是對于 C++ 函數的返回值很容易忽略它。我想自動檢查我的代碼是否正確。我看到 Address Sanitizer 是為 GCC 和 Clang 實現的,這聽起來是正確的。但是我找不到一個明確的方法來為我的go test命令啟用它。
2 回答
慕勒3428872
TA貢獻1848條經驗 獲得超6個贊
Defer在塊內的工作(功能等)中非常有用。然而,這并不總是足夠的。
你需要什么runtime.SetFinalizer
直接來說,我不認為你可以用 Go 來檢查其他任何東西的內存狀態。(所以在 C 或 C++ 中分配的內存。)
如果我是你,我會將 C 代碼的一部分編譯為共享的。稍后我可以很容易地使用諸如 clang 之類的工具來檢查這一點。如果你的 C 代碼沒有問題,你就無法干擾 Go 的 gc。
尚方寶劍之說
TA貢獻1788條經驗 獲得超4個贊
我認為CC="clang -fsanitize=address" go test或CC="gcc -fsanitize=address" go test應該工作。
- 2 回答
- 0 關注
- 150 瀏覽
添加回答
舉報
0/150
提交
取消
