NJU PA debug记录
之前总结过如何找到有问题的指令
- si 100 /1000,二分法迅速找到存在问题的指令范围
- 搞懂汇编逻辑
- 确定有问题的指令
但是仍然遇到困难,特别是汇编代码量大的时候。
之后添加了itrace(指令追踪)和diffTest(差别测试)功能,能快速定位问题指令,知道执行指令的期望结果。
debug经历:
测试程序mul-longlong.c,指令mulh输出错误
mulh a5 a5 a9 ;a5<-a5*a9
执行前:
a5 0xaeb1c2aa
s9 0xaeb1c2aa
执行后
a5 0x7736200d
但是期望输出是 0x19D29AB9
通过一系列类型转换测试,才发现问题
// (unsigned int)(((long long)src1 * (long long)) src2 >> 32) error
// (long long)(((long long)src1 * (long long)src2) >> 32) still error
// (long long)(((long long)((signed int) src1) * (long long)((signed int) src2)) >> 32) right
原因:
src1类型是unsigned int,转换为long long(默认是signed)出现问题
需要先把src1转换为unsigned int, 再转换为long long

浙公网安备 33010602011771号