【发布时间】:2010-10-19 23:05:40
【问题描述】:
这个
en.wikipedia.org/wiki/Hot_swapping#cite_note-1
说 VS 可以在其调试器的帮助下做到这一点。 gdb 是否提供类似的功能?
这是我能找到的最接近的,但似乎还没有准备好使用:
http://www.aitdspace.gr/xmlui/handle/123456789/219
dlopen/dlsym/dlclose 也很接近,但不适用于 -lmylib 引用的库(引用计数永远不会为 0)。
我考虑过的替代方案:
1) 使用 -Wl,-wrap,foo 和 __wrap_foo() { func = dlopen();函数(); }
2) 使 libfoo.so 成为共享库,当我们需要热交换时,我们 dlopen(RTLD_GLOBAL) 来加载新代码并为下一次调用 foo() 提供更新的符号;
1) 效果不是很好,因为它需要我枚举所有我想热插拔的函数,它们都是。
2) 不能很好地工作,因为调用 foo() 时,会加载新代码,但 foo 永远拥有对该符号的引用。多次调用 dlopen 会使 foo 被重新评估。
【问题讨论】: