如何解决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开关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。