工程生成了.elf文件,并不代表它一定能用于源码级调试。以TASKING的TriCore图形界面工程为例,编译时要生成调试信息,链接及后处理时还要保留这些信息。如果ELF已生成却看不到变量或源码行,可以按构建配置、文件内容、调试器加载路径的顺序检查。
一、TASKING怎么生成ELF调试文件
TriCore工具链默认可以输出ELF文件;源码级调试所需的信息由编译选项生成。设置前先确认当前启用的构建配置,以免修改了一个配置,却拿另一个目录的文件调试。
1、确认构建配置
①点击【Project】→【Properties】→【C/C++Build】→【Settings】,查看【Configuration】中的当前配置。
②选择准备用于调试的配置,打开【Tool Settings】。
③记下该配置的输出目录,后续到该目录核对.elf文件。
2、生成编译调试信息
①在【Tool Settings】中点击【C/C++Compiler】→【Debugging】。
②将【Generate symbolic debug information】设为【Default】,不要选择【None】。
③保存设置。若使用命令行构建,检查编译命令是否包含--debug-info=default或-g。
3、保留链接后的符号
①进入【Linker】→【Miscellaneous】,找到【Strip symbolic debug information】。
②取消该项的勾选并保存;若使用构建脚本,检查链接命令是否包含--strip-debug或-S。
③项目包含手写汇编文件时,进入【Assembler】→【Symbols】,检查【Generate symbolic debug】的设置。
4、重新构建并找到ELF
①点击【Project】→【Clean】,选择立即构建并执行。
②在当前配置的输出目录找到新生成的.elf,核对文件名和修改时间。
③点击【Run】→【Debug Configurations】,检查【C/C++Application】是否指向这个.elf。
二、TASKING生成的ELF文件缺少调试符号如何排查
先确认缺少的是文件中的调试信息,还是调试器没有加载正确的文件。若只有函数名、无法按源码单步执行,也要检查所选的调试信息级别。
1、核对编译级别
①重新打开当前配置的【C/C++Compiler】→【Debugging】,检查【Generate symbolic debug information】。
②如果选择了【Small set】,改为【Default】并重新构建,再测试源码单步调试。
③查看构建控制台中的编译命令,逐个核对出现问题的源文件是否带有调试参数。
2、检查链接和后处理
①在【Linker】→【Miscellaneous】中确认【Strip symbolic debug information】未勾选。
②检查构建结束后的命令,查找elfstrip和--strip-debug。
③对照剥离前、剥离后文件的名称与路径,把未剥离的ELF指定为调试文件。elfstrip--strip-debug会移除调试节及其相关符号。
3、排查旧文件和配置混用
①对照【Configuration】和输出目录,检查是否误用了Release目录中的.elf。
②点击【Project】→【Clean】重新构建,随后核对.elf的修改时间及构建日志。
③回到【Run】→【Debug Configurations】,重新核对【C/C++Application】的文件路径。
4、检查调试器加载路径
①如果使用TASKING的winIDEA调试配置,先检查【C/C++Application】指向的工程与ELF。
②如果在winIDEA中单独指定符号文件,进入【Debug】→【Session Configuration】→【Applications】→【Symbol Files】,核对文件路径。
③更换ELF后重新加载符号并启动调试;代码文件和符号文件分别配置时,两处路径都要核对。
三、ELF有符号却无法正常源码调试怎么办
如果文件已经包含调试数据,但局部变量仍无法查看,或断点与源码行对不上,可继续检查ELF内容、优化设置和源码路径。
1、查看ELF中的信息
①在工具链命令行运行hldumptc-F3文件名.elf。
②查看输出中的模块列表与高级语言符号表,查找目标源文件和函数。
③选取一个工程自身的函数,核对它是否出现在高级语言符号表中;未出现时,返回编译选项和剥离步骤检查。
2、降低调试构建的优化级别
①点击【Project】→【Properties】→【C/C++Build】→【Settings】→【Tool Settings】→【C/C++Compiler】→【Optimization】。
②在调试配置中降低【Optimization level】,保存后完整构建工程。
③加载新ELF,重新检查局部变量及源码行断点。
3、核对源码文件路径
①在调试器中查看无法定位的源文件名称,并核对该文件在当前电脑上的实际位置。
②如果ELF在另一台电脑上编译,在调试器的源码目录设置中添加对应路径。
③重新加载符号,打开源码视图,再测试断点是否映射到目标代码行。
总结
排查ELF调试问题时,文件是否包含符号、调试器是否读到了该文件,都需要核对。工程同时保留调试配置与交付配置时,把各自的输出目录和用途标清,也能减少拿错旧文件的情况。希望这篇关于TASKING怎么生成ELF调试文件、生成的ELF缺少调试符号如何排查的内容能对大家有帮助。如有TASKING相关需求,欢迎联系我们咨询。