Ada列出文件...什么是GNAT正确的编译器才能使它们出来

问题描述

我习惯从C代码中获得不错的列表文件,在这里我可以看到可爱的源代码与操作码和十六进制偏移量交织在一起,以进行调试,如下所示:C中的文件列表(.LST)List File In C (.LST)

-S指令仅从g ++中为Ada获取了我的汇编代码。但是我似乎无法让它放弃好东西,因此我可以调试令人讨厌的精心设计崩溃。

对GNAT编译器有任何想法要转入吗?

解决方法

也许这会有所帮助。下一条命令生成的内容类似于您所引用的内容:

$ gnatmake -g main.adb -cargs -Wa,-adhln > main.lst

-cargs(所谓的模式切换)使gnatmake将后续参数传递给编译器。编译器随后将-adhln开关传递给汇编器(请参见here)。但是,您最好在构建后使用objdump -d -S main.o来查看程序集/源代码。

main.adb

with Ada.Text_IO; use Ada.Text_IO;

procedure Main is
begin
   Put_Line ("Hello,world!");
end Main;

输出(main.lst)

   1                    .file   "main.adb"
   2                    .text
   3                .Ltext0:
   4                    .section    .rodata
   5                .LC1:
   6 0000 48656C6C      .ascii  "Hello,world!"
   6      6F2C2077 
   6      6F726C64 
   6      21
   7 000d 000000        .align 8
   8                .LC0:
   9 0010 01000000      .long   1
  10 0014 0D000000      .long   13
  11                    .text
  12                    .align 2
  13                    .globl  _ada_main
  15                _ada_main:
  16                .LFB1:
  17                    .file 1 "main.adb"
   1:main.adb      **** with Ada.Text_IO; use Ada.Text_IO;
   2:main.adb      **** 
   3:main.adb      **** procedure Main is
  18                    .loc 1 3 1
  19                    .cfi_startproc
  20 0000 55            pushq   %rbp
  21                    .cfi_def_cfa_offset 16
  22                    .cfi_offset 6,-16
  23 0001 4889E5        movq    %rsp,%rbp
  24                    .cfi_def_cfa_register 6
  25 0004 53            pushq   %rbx
  26 0005 4883EC08      subq    $8,%rsp
  27                    .cfi_offset 3,-24
  28                .LBB2:
   4:main.adb      **** begin
   5:main.adb      ****    Put_Line ("Hello,world!");
  29                    .loc 1 5 4
  30 0009 B8000000      movl    $.LC1,%eax
  30      00
  31 000e BA000000      movl    $.LC0,%edx
  31      00
  32 0013 4889C1        movq    %rax,%rcx
  33 0016 4889D3        movq    %rdx,%rbx
  34 0019 4889D0        movq    %rdx,%rax
  35 001c 4889CF        movq    %rcx,%rdi
  36 001f 4889C6        movq    %rax,%rsi
  37 0022 E8000000      call    ada__text_io__put_line__2
  37      00
  38                .LBE2:
   6:main.adb      **** end Main;
  39                    .loc 1 6 5
  40 0027 4883C408      addq    $8,%rsp
  41 002b 5B            popq    %rbx
  42 002c 5D            popq    %rbp
  43                    .cfi_def_cfa 7,8
  44 002d C3            ret
  45                    .cfi_endproc
  46                .LFE1:
  48                .Letext0:
,

您可能希望查看the top-secret GNAT documentation中有关调试控制的部分,尤其是-gnatG开关。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...