因为不明原因,编译的程序运行出错,需要阅读汇编代码排查。
目前只知道Keil在调试状态下能看到运行中的汇编代码。阅读起来非常不便。
请问,有什么办法或者工具,把阅读甚至打印出完整的汇编代码?
----------------------------------------------------------------------------------------------
补充:可能有朋友劝我没有必要去看汇编代码。
但,有些莫名其妙的故障,通过看汇编才能发现问题。已经有过两次经验:
一次是我定义了两个指定地址的变量
u32 test1[100] __attribute__((at(0X68000000)));
u8 test2[400] __attribute__((at(0X68000000)));
结果发现两个数组空间并不重叠,这是通过看编译后的汇编才发现的。然后认识到是自己对编译原理的认识不足
另一次是帮助网友排错,他的程序总是跑飞
也是通过看汇编发现某个函数的入口地址错误,改变优化等级为level0才正常。
生成反汇编文件 fromelf –text -a -c –output=xxxx.txt xxxx\xxxx.axf 其中–text是指定输出文件格式为text格式, -a Prints the global and static data addresses-c Disassembles code –output=xxxx.txt 指定输出文件名, xxxx\xxxx.axf 是指定路径下的指定axf文件,此文件作为输入文件,是keil编译后产生的;
没这个必要吧,汇编比 c 语言代码量还大。
直接用 c 定位出来问题在哪里,找找不就知道了,除非你汇编比 c 的水平还高。
你这种语言定义本身就是特定语法特性吧。
要生成汇编,需要在编译选项那里加上
fromelf.exe --text -a -c --output=XX.txt
后面那个XX是你的文件名