【问题标题】:Editing source during program execution在程序执行期间编辑源代码
【发布时间】:2011-10-11 13:41:25
【问题描述】:

我有一个 C 程序,它从不同的文件调用多个函数,在编译时我将所有目标文件链接在一起以生成二进制文件。然后我开始执行程序。现在我想编辑各种文件的源代码并编译新版本。这将覆盖旧的对象和二进制文件。

这样做会影响当前程序的执行吗?它现在会链接新的目标文件吗?如果我覆盖正在运行的二进制文件,这会导致执行停止,还是以其他方式影响它?或者代码是否存储在执行开始时无法覆盖的地方?

我正在使用 gcc 来编译我的代码。

【问题讨论】:

    标签: c unix gcc compilation


    【解决方案1】:

    在 Unix 上,让gcc 替换可执行文件不会对正在运行的程序产生影响。

    它的工作方式是,只要程序运行,旧的可执行文件就会一直保留在磁盘上,以便操作系统可以在需要时引用它。将不再有指向旧可执行文件的目录条目,并且当程序的旧实例停止时,磁盘空间将被回收。

    【讨论】:

    • 如果我使用'system'函数调用外部程序,那么在执行期间编辑该程序会影响程序执行吗?
    • @JTS:对不起,我很难理解你的问题。你想达到什么目的?
    • 对不起,让我说得更清楚些。我有一个可执行的'foo',和一个c程序'bar.c',在'bar.c'内部我称之为'system(“./foo”);'。我编译并运行'bar.c'。如果我现在覆盖 'foo' 会影响 'bar' 的执行吗?
    • @JTS:不,它不会(但任何后续调用 system("./foo") 都会获取新的可执行文件)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多