Sun Studio 12:使用 dbx 调试程序

使用修复并继续

使用修复并继续功能,可以修改和重新编译本地源文件并继续执行,而无需重新生成整个程序。通过更新 .o 文件并将其拼接到程序中,即可不必重新进行链接。

使用修复并继续的优点是:

修复并继续如何操作

使用 fix 命令之前,必须在编辑窗口中编辑源代码。(有关修改代码的方式,请参见使用修复并继续修改源码。)保存更改后,请键入 fix。有关 fix 命令的信息,请参见fix 命令

调用 fix 命令后,dbx 会使用适当的编译器选项来调用编译器。编译已修改的文件并创建共享对象 (.so) 文件。通过比较新旧文件进行语义测试。

使用运行时链接程序将新的目标文件链接到正在运行的进程。如果正在修复位于栈顶的函数,则新的停止于函数便是新函数中同一行的开头。旧文件中的所有断点均被移到新文件中。

无论文件在编译时是否使用了调试信息,都可以对其使用修复并继续功能,但对于在最初编译时未使用调试信息的文件,fix 命令和 cont 命令有一些功能性限制。有关更多信息,请参见fix 命令中有关 -g 选项的说明。

可以修复共享目标 (.so) 文件,但必须在特殊模式下打开这些文件。在调用 dlopen 函数时,可以使用 RTLD_NOW|RTLD_GLOBAL RTLD_LAZY|RTLD_GLOBAL

Sun Studio C 和 C++ 编译器的预编译头功能要求重新编译时编译器选项相同。由于 fix 命令会对编译器选项稍加更改,因此请勿对使用预编译头创建的目标文件使用 fix 命令。

使用修复并继续修改源码

使用修复并继续时,可以通过以下方式修改源码:

将函数从旧文件映射到新文件时,可能会出现问题。要在编辑源文件时尽量减少此类问题:

如果进行上述任一更改,请重新生成整个程序,而不要使用修复并继续。