Question

en.wikipedia.org/wiki/Hot_swapping#cite_note-1

dit que VS peut le faire avec l'aide de son débogueur. Est-gdb une fonctionnalité similaire fournir?

est le plus proche que je pouvais trouver, mais ne semble pas être prêt à être utilisé:

http://www.aitdspace.gr/xmlui/handle/123456789/219

dlopen / dlsym / dlclose sont également proches, mais ne fonctionnera pas pour les bibliothèques référencées -lmylib (nombre de référence ne fait jamais à 0).

alternatives que j'ai considéré:

1) en utilisant -Wl, -wrap, foo et sur __wrap_foo () {func = dlopen (); func (); }

2) faisant libfoo.so une bibliothèque partagée et quand nous devons nous hotswap dlopen (RTLD_GLOBAL) pour charger le nouveau code et fournir des symboles mis à jour au prochain appel à foo ();

1) ne fonctionne pas très bien parce qu'il me faut d'énumérer toutes les fonctions que je veux hotswap, qui sont tous.

2) n'est appelé fonctionne pas très bien parce que quand foo (), le nouveau code est chargé, mais foo a toujours la référence à ce symbole. appelant dlopen plusieurs fois faire foo recréée évaluée.

Était-ce utile?

La solution

Vous pourriez certainement vous pirater un système où vous stockez une liste de pointeurs de fonction et peut modifier ces pointeurs pour pointer vers la bibliothèque qui vous avez dlopen () 'd à l'époque.

Vous avez raison, il n'y a aucun moyen facile d'appels d'interception à des routines avec liaison fixe. Vous pouvez toujours clobber le début de la routine avec un saut assemblage à une autre routine, mais qui peut être dangereux (et n'est pas C).

Peut-être un symbole qui est faible dans votre code et fort dans un (dlopen) «bibliothèque d fonctionnerait?

Dans tous ces cas, vous devez faire face à la situation dans laquelle l'ancien code est en cours d'exécution. Ce n'est pas facile non plus, à moins que vous avez des points dans votre programme où vous le savez sans fil est dans la bibliothèque que vous voulez échanger.

Autres conseils

Vous pouvez être intéressé par Ksplice. C'est une technologie qui est sorti du MIT qui permet aux correctifs logiciels à appliquer au noyau Linux sans redémarrer. Ceci est le plus pertinent pour l'application des mises à jour de sécurité:

http://www.ksplice.com/paper

le plus proche que j'ai trouvé est solari dbx qui vient avec le studio de développeur oracle, cependant studio dev utilisations DBX dans Linux et solaris, que solaris supports de version "edit-and-continue" ou "échange de code à chaud"

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