TRACE32里的“调试日志”可能指PowerView命令记录、系统访问日志、变量变化记录,也可能是Trace采集结果。不同日志使用的导出命令并不一样。需要保留调试过程时,可以使用【LOG.OPEN】记录TRACE32操作;要分析目标访问异常,则更适合查看【SYStem.LOG.List】;如果准备把某个窗口内容保存成文本,还可以通过【PRinTer.FILE】和【WinPrint】导出。日志生成后内容不完整时,要先确认记录对象和启动时间,再检查输出范围、文件覆盖以及目标访问是否真的被纳入记录。
一、TRACE32怎么导出调试日志
普通调试过程可以先使用LOG记录TRACE32命令。如果需要把当前窗口里的系统日志、变量结果或Trace列表一起交给其他人员,再分别导出对应窗口。
1、记录TRACE32操作命令
①打开TRACE32 PowerView。
②在命令行输入【LOG.OPEN"debug.log"】。
③确认日志文件已经成功创建。
④开始执行【SYStem.Up】【Data.LOAD】【Break.Set】【Go】等调试操作。
⑤通过菜单执行的部分TRACE32操作也会进入记录。
⑥完成需要保留的调试过程后输入【LOG.CLOSE】。
⑦打开生成的【debug.log】检查记录内容。
⑧需要再次记录时重新执行【LOG.OPEN】。
这种日志更适合保存TRACE32命令执行过程,用来复现操作步骤。它不是CPU运行Trace,也不会自动保存变量历史和所有目标访问。
2、把窗口内容导出为文本
①先打开需要保存的窗口,例如【SYStem.LOG.List】或【Trace.List】。
②输入【PRinTer.FILE debug_output.txt】设置输出文件。
③需要在原文件后继续追加时使用【/Append】。
④导出系统日志时执行对应的【WinPrint.SYStem.LOG.List】或从窗口执行打印输出。
⑤导出Trace列表时可执行【WinPrint.Trace.List】。
⑥只需要某段Trace记录时,在命令后指定记录范围。
⑦导出后打开文本文件检查首尾记录。
⑧再次导出到同一个文件前确认是否需要【/Append】,否则原内容可能被覆盖。
3、需要保留Trace原始记录时单独保存
①确认已经完成Trace采集。
②打开【Trace.List】检查当前记录。
③执行【Trace.SAVE trace_data.ad】。
④需要只保存部分记录时,在命令中指定记录范围。
⑤需要普通文本时使用【Trace.EXPORT.ASCII trace.txt】。
⑥需要后续继续在TRACE32中分析时,优先保留【.ad】文件。
⑦同时保存当前ELF和调试符号,便于以后重新解析调用地址。
二、TRACE32调试日志内容缺失如何调整
日志中少了前半段操作、目标访问或变量数据时,先确认使用的记录功能是否适合当前需求。LOG、SYStem.LOG和Trace记录的对象不同,不能互相代替。
1、检查日志是不是开启得太晚
①查看脚本或调试流程中【LOG.OPEN】的位置。
②如果CPU连接和程序加载已经在LOG.OPEN之前执行,这些操作不会进入日志。
③把【LOG.OPEN】移动到启动脚本前部。
④需要记录启动脚本自身操作时,在执行【DO】之前开启LOG。
⑤重新运行完整调试流程。
⑥结束时确认执行了【LOG.CLOSE】。
⑦再次检查文件是否包含【SYStem.CPU】【SYStem.Up】和程序加载阶段。
需要完整复现启动过程时,日志必须在这些命令执行之前打开。
2、系统访问记录缺失时检查SYStem.LOG
①执行【SYStem.LOG.state】打开系统日志配置。
②确认日志功能处于开启状态。
③打开【SYStem.LOG.List】。
④执行【Clear】或初始化当前记录。
⑤重新触发需要分析的内存访问或调试操作。
⑥查看列表中是否出现对应Read、Write等访问。
⑦发生Bus Error时,重点检查列表最后几条记录。
⑧需要保留结果时,再通过【PRinTer.FILE】和【WinPrint】导出。
【SYStem.LOG.List】主要记录TRACE32对目标系统执行的访问。默认会记录内存访问,但其他访问类型是否出现,要看当前System Log配置。
3、导出文件只有部分窗口内容
①检查当前使用的是普通窗口打印还是完整记录导出。
②使用【WinPrint】时,确认有没有错误指定过窄的地址或记录范围。
③Trace只导出一段时,重新检查起止Record Number。
④需要整个Trace数据时直接使用【Trace.SAVE】。
⑤文本日志需要多次追加时,在【PRinTer.FILE】中使用【/Append】。
⑥没有使用Append时,确认后一次导出是否覆盖了前一次内容。
⑦重新生成文件后检查文件大小和记录首尾。
三、需要记录变量或异常现场时怎么补充日志
普通命令日志不能记录变量随时间的变化。如果问题与变量跳变、访问异常或CPU运行轨迹有关,可以另外建立对应记录,不要只扩大debug.log。
1、记录变量变化
①打开需要观察的变量。
②使用【Var.LOG】加入目标变量。
③需要变量变化时才记录,可使用对应Change模式。
④需要周期采样时,配置定时记录方式。
⑤为变量日志单独建立AREA。
⑥把AREA输出到独立文件。
⑦运行程序并复现问题。
⑧结束后关闭变量记录,再检查日志中的时间点和变量值。
2、发生访问异常时保留现场
①打开【SYStem.LOG.List】。
②清除旧记录。
③重新执行会触发异常的操作。
④出现【bus error】或【debug port fail】后立即停止其他操作。
⑤查看最后一次目标访问的地址和类型。
⑥保存当前System Log。
⑦同时记录【PC】、调用栈和目标状态。
⑧再根据异常地址检查是否存在无效内存、访问权限或地址转换问题。
总结
TRACE32调试日志内容是否完整,首先取决于使用了哪一种记录功能。LOG适合保存PowerView操作过程,SYStem.LOG适合检查调试器对目标的访问,Trace.SAVE用于保留CPU运行Trace,变量变化则应单独使用Var.LOG。出现缺失时,应先确认记录是否在问题发生前启动,再检查导出范围和文件覆盖设置。如需进一步了解TRACE32日志导出、System Log配置与调试记录缺失排查方法,欢迎联系咨询。