大家都知道用静态类型的c语言写的代码,在编译连接成可执行程序后,它的运行时处理逻辑就是固定的了。除非你停掉它,修改源码本身,重新编译连接,然后重新启动。哦,但是,朋友,不知道你遇到过这样的情况没有:你的程序现在运行不是很正常,你现在特别想看看程序里一些变量的值或是其它东西。糟糕的是,你的日志没有输出你需要的东西,你又不能停掉你的应用程序,因为这样你就破坏了运行时环境。况且,你的用户可能会与你说:“喔,现在不能动它,因为,现在是业务高峰期,晚上在说吧!”。可怜的你,只好等到半夜,然后修改程序,重新启动它。然后,你去睡觉了。第二天,你发现你的程序还是有一些问题,可是你昨天晚上加上的输出信息,可能仍然不能满足你定位程序的问题。喔,这也许是这个世界上最糟糕的事情了^_^,你不得不再熬夜,仍然在当一个机会主义者。
dyninstapi就是这样的一个api(c++写的),它给你提供了一些方便的接口,让你方便的修改另一个程序。ok,那么我们结合一个简单的例子,来看一下这个好东东吧^_^。 【相关文章:設計模式之Builder】
在«程序员»第5期,介绍了动态语言,非常棒的专题。是的,«程序员»杂志就是这样,总能给你带来一些新鲜的东西,弥补你知识上的空白。从这些文章里我们了解到一些动态语言有这样的功能,在不停掉应用程序的情况下,就修改了程序的运行时逻辑。喔,令人羡慕。那是不是说,c语言写的程序就无药可就了那。当然不会,还是那句话,c无所不能^_^(就是本人能力有限)。我们还是有一些工具来修改c语言写的程序的。ok,那俺就在这里仍一个石子,引起大家的注意^_^。 【扩展阅读:設計模式之Prototype(原型)】
【扩展信息:Java工具,你用了吗?】随便写了点测试代码,test_dynamic.c:
#include <stdio.h> #include <unistd.h>void old()
{ printf("old old old pid is %d\n", getpid()); }void new()
{ ... 下一页