Советы по отладке SWIG-завернутого кода C ++ в Eclipse? - PullRequest
2 голосов
/ 08 декабря 2010

У меня есть большая часть кода C ++, который я завернул SWIG и вызываю его из Java.В коде C ++ широко используются интеллектуальные указатели наддува.

Некоторые из моих тестов JUnit завершены, но при очистке возникают ошибки seg.Трассировка стека указывает на ошибку памяти при финализации объекта, но это происходит в коде JNI, сгенерированном SWIG, и, кажется, связан с подсчетом ссылок интеллектуального указателя.слои кода.Это возможно?Я также был бы очень рад услышать, как другие сталкиваются с подобными проблемами.

1 Ответ

1 голос
/ 17 декабря 2010

Вы можете присоединить второй отладчик с собственным кодом к исполняемому коду Java. Например, в Visual Studio вы можете подключиться через «Отладка> Присоединить к процессу».

SWIG поддерживает интеллектуальные указатели, но вы должны явно управлять их временем жизни на стороне Java. Если вы получаете право владения объектом смарт-указателя на стороне Java, вы должны удалить его. Имейте в виду, что в Java нет временных объектов, выходящих за пределы области видимости, поэтому вы не сможете использовать выражения типа f (). G (). H (), в которых возвращаемые значения на каждом уровне являются умными указателями.

В качестве отказоустойчивого, сгенерированный SWIG финализатор попытается удалить его для вас, если произойдет сборка мусора. Этот отказоустойчивый будет вреден, если объект уже был удален на стороне C ++.

...