ее в го через СGO. Решили для проверки утечек памяти подключить санитайзер ASAN. В тестовом модуле добавил TestMain:
func TestMain(m *testing.M) {
res := m.Run()
runtime.GC()
runtime.GC()
doSanitizerCheck()
os.Exit(res)
}
В го проброшены С методы для чистки памяти, которые и используются.
Как можете заметить, после прогона тестов GС вызывается 2 раза. Потому что если вызвать его 1 раз, то каждый раз остаются рандомные утечки в разных местах, а может и не остаются. В общем с одним вызовом GC это работает рандомно и никак не связано. Может быть кто знает в чем может быть проблема?
Какие еще методы есть для поиска утечек памяти в подключаемом через CGO коде?
санитайзеры на го оч часто выдают ложные предупреждения. Я бы тестировал сишный код отдельно (перенеся в него всю логику)
Обсуждают сегодня