dbx 为优化代码提供部分调试支持。支持的程度主要取决于编译程序的方式。
在分析优化代码时,可以执行以下操作:
在任何函数的开始处停止执行(stop in function 命令)
计算、显示或修改参数
计算、显示或修改全局变量、局部变量或静态变量
从一行单步执行到另一行(next 或 step 命令)
如果在同时启用优化和调试的情况下(使用 –O 和 –g 选项)编译程序,dbx 将在限定模式下操作。
关于在什么情况下哪些编译器发出哪种符号信息的详细信息,随发行版的不同也会有所不同。
源代码行信息可用,但一个源代码行的代码可能会出现在优化程序的几个不同位置上,所以按源代码行在程序中单步执行会导致当前行位于源文件中的不同位置上,这取决于优化器如何调度代码。
当函数中的最后一个有效操作是调用另一个函数时,尾部调用优化会导致丢失堆栈帧。
对于 OpenMP 程序,使用 –xopenmp=noopt 选项进行编译即指示编译器不要应用任何优化。但是,为了实现 OpenMP 指令,优化器仍会处理代码,因此,使用 –xopenmp=noopt 编译的程序可能会出现所描述的一些问题。