Oracle® Solaris Studio 12.4:使用 dbx 调试程序

退出打印视图

更新时间: 2015 年 1 月
 
 

修复后继续

可以使用 cont 命令继续执行。在恢复程序执行之前,需要注意下列决定更改效果的条件,详见本节中的描述。

更改已执行的函数

如果在已执行的函数中进行了更改,这些更改要在您再次运行程序或下次调用该函数后才会生效。

如果不只是对变量进行简单更改,应先使用 fix 命令,然后使用 run 命令。使用 run 命令比较快,因为它不会重新链接程序。

更改一个尚未被调用的函数

如果在尚未调用的函数中进行了更改,这些更改将在调用该函数时生效。

更改当前正在执行的函数

    如果对当前正在执行的函数进行了更改,fix 命令的作用取决于更改相对于停止于函数的位置:

  • 如果在已执行的代码中进行更改,则不会重新执行这些代码。通过从堆栈中弹出当前函数并从所更改函数的调用位置继续执行代码。 您需要非常了解代码,以便确定函数是否具有无法撤消的副作用(例如,打开文件)。

  • 如果在尚未执行的代码中进行更改,则会运行新代码。

更改当前位于堆栈中的函数

如果已经对当前位于堆栈中的函数而不是停止于函数进行了更改,当前的函数调用不会使用已更改的代码。 当停止于函数返回时,会执行堆栈中的旧版本函数。

    有几种方法可以解决此问题:

  • 使用 pop 命令弹出堆栈,直到从堆栈中删除所有已更改的函数。 您需要了解代码,以确保不会发生问题。

  • 使用 cont at 命令从另一行继续执行。

  • 在继续执行之前,手动修复数据结构(使用 assign 命令)。

  • 使用 run 命令重新运行程序。

如果堆栈中已修改的函数内存在断点,则会将断点移动到函数的新版本中。如果执行了旧版本,则程序不会在这些函数中停止。