TI中文支持网
TI专业的中文技术问题搜集分享网站

调试中的问题(堆栈溢出,形参传递)

各位专家:

 

       在调试中经常出现一点改动,重新编译后,程序运行结果不正确的现象(与改动处无关)

        例如   1. 形参传递不正确,形参指针取址传递时带入的地址不正确(地址单字节)。

                  2. 赋值语句不正确(参数无法赋值)

                  3. 子函数调用不正确(进入不了子函数)

        诸如此类与程序代码预想不一致的编译结果,rebuild后可能问题就没有了,怀疑是堆栈溢出的问题,但是查看map文件修改堆栈大小都无法定位问题到底出现

在哪,请各位专家指导一下,出现此类问题的原因该如何定位?堆栈溢出的问题有没有什么中断或寄存器可以直接定位?

 

   

   

Adam Yao94020:

你说的这些现象是使用CCS单步跟踪代码运行发现的么?

堆栈溢出是一个软件行为,没有专门的寄存器可以观察。你可以在明确堆栈其实地址后,在memory窗口看看栈顶位置有没有非法改写的痕迹来判断。

同时检查一下自己的函数中有没有定义特别大的局部变量,尤其是数组。

li yanlong:

回复 Adam Yao94020:

您好:

         以上问题是在单步跟踪代码发现的。我现在的栈开的挺大的(0x15000),程序中确保没有大数组,累加数组也有越界保护。

         发现错误在程序build的情况下出现比较多,rebuild或者clean以后再build出错的概率较小,也出现过。不知和编译器版本有没有关系,我们现在主要还在用

5.1,5.2和5.3的版本,不知会不会有影响。

         为了8核并行方便,我把堆栈和全局变量都放在L2中,但是L2 不能用的太多,少于0x10000就容易出问题,后续准备在栈顶设置一个标志,赋特殊值检测一下。

请问除了堆栈问题还有其他需要注意的地方吗??谢谢!!!

Adam Yao94020:

回复 li yanlong:

从你描述的现象看,不一定是代码存在问题。如果代码采用O3优化的话,单步运行的时候可能出现你所说的问题。

建议你看看程序实际运行的结果是不是正确,或者先不加优化编译,并增进-g编译选项,再单步运行看看。

赞(0)
未经允许不得转载:TI中文支持网 » 调试中的问题(堆栈溢出,形参传递)
分享到: 更多 (0)