Question

J'ai un grand corps de code C que je l'ai enveloppé avec SWIG et je l'appeler de Java. Le code C ++ utilise libérale de pointeurs intelligents boost.

Certains de mes fautes JUnit teste seg expérience complète, mais puis pendant le nettoyage. La trace de pile indique une erreur de mémoire dans la mise au point d'un objet, mais il se passe dans le code généré par SWIG JNI et semble être associé à la puce de comptage de référence de pointeur.

Je voudrais être en mesure d'intervenir dans toutes les couches du code. Est-ce possible? Je serais très heureux d'entendre les expériences des autres avec ce genre de problème.

Était-ce utile?

La solution

Vous pouvez joindre un deuxième, un débogueur de code natif à l'exécution de code Java. Par exemple, avec Visual Studio, vous pouvez connecter via un "Debug> Attacher au processus."

SWIG supporte des pointeurs intelligents, mais vous devez gérer leur vie de façon explicite sur le côté Java. Si vous obtenez la propriété d'un objet intelligent pointeur sur le côté Java, vous devez le supprimer. Gardez à l'esprit que Java n'a pas temporaires d'objet hors de portée, de sorte que vous ne serez pas en mesure d'utiliser des expressions comme f (). G (). H (), dans lequel les valeurs de retour à chaque niveau sont des pointeurs intelligents.

En tant que sécurité intégrée, le finaliseur généré SWIG-tentera de le supprimer pour vous si la collecte des ordures se produit. Ce sera nocif failsafe si l'objet a déjà été supprimé du côté C ++.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top