Oracle® Solaris Studio 12.4:性能分析器

退出打印视图

更新时间: 2015 年 1 月
 
 

带注释的反汇编代码

带注释的反汇编代码提供了函数或对象模块指令的汇编代码列表,以及与每个指令相关联的性能度量。 带注释的反汇编代码有多种显示方法,具体取决于行号映射和源文件是否可用,以及请求其带注释的反汇编代码的函数的对象模块是否已知。

  • 如果对象模块未知,则性能分析器只对指定函数的指令进行反汇编,并且不会在反汇编代码中显示任何源代码行。

  • 如果对象模块已知,则针对对象模块内的所有函数进行反汇编。

  • 如果源文件可用,并且记录了行号数据,则性能分析器可以根据显示首选项交错显示源代码和反汇编代码。

  • 如果编译器已向对象代码中插入注释,则它也可交错显示在反汇编代码中(如果已经设置了相应的首选项)。

反汇编代码中的每个指令都用以下信息进行注释:

  • 由编译器报告的源代码行号

  • 它的相对地址

  • 指令的十六进制表示(如果要求)

  • 指令的汇编程序 ASCII 表示

调用地址尽可能解析为符号(如函数名称)。度量显示在指令行上。如果设置了相应的首选项,度量还可显示在任何交错显示的源代码中。源代码注释的可能度量值如Table 7–1 所述。

对于在多个位置包含在 #include 中的代码,每次当代码包含在 #include 中时,代码的反汇编代码列表都会重复执行一次反汇编指令。只有在文件中首次显示反汇编代码的重复块时,源代码才会交叉。例如,如果在名为 inc_body.h 的头文件中定义的代码块分别由 inc_bodyinc_entryinc_middleinc_exit 四个函数 #included,则反汇编指令块将在 inc_body.h 的反汇编代码列表中出现四次,但是源代码仅在四个反汇编指令块的第一个块中交错显示。切换到 "Source"(源)视图,可以看到与每次重复的反汇编代码对应的索引行。

可以在 "Disassembly"(反汇编)视图中显示索引行。与 "Source"(源)视图不同的是,不能直接使用这些索引行进行导航。 将光标放在紧挨该索引行下方的其中一条指令上,然后选择 "Source"(源)视图,可以导航至该索引行中引用的文件。

对其他文件中的代码执行了 #include 操作的文件会将通过该操作包含的代码显示为不与源代码交错显示的原始反汇编指令。将光标放在这些指令中的其中一条指令上,然后选择 "Source"(源)视图,将打开包含 #included 代码的文件。在显示此文件时选择 "Disassembly"(反汇编)视图,将显示与源代码交错显示的反汇编代码。

内联函数的源代码可以与反汇编代码交错显示,但宏的源代码则不能与反汇编代码交错显示。

代码未优化时,每个指令的行号按顺序显示,源代码行和反汇编指令的交错显示以预期的方式进行。优化后,后面行的指令有时会显示在前面行的指令前面。分析器的交错显示算法为:只要指令显示为来自第 N 行,该行前所有源代码行(包括第 N 行)都会写入该指令前。优化的一个作用是源代码可以在控制转移指令与其延迟槽指令之间显示。与源代码的第 N 行关联的编译器注释就写在该行之前。