最近检查线程的堆栈使用情况,看是否会越界或者分配太多。没有找到直接的工具,所以使用EPTree来统计,本来想用lex和Yacc来实现的,时间太紧,等有空的再研究一下。
下面说说一些使用的问题和方法。
- 追加头文件路径直接修改Eptree.ini文件比较方便,注意[標準インクルード設定数]这项也要修改。
- 结构体类型的对齐不会设置,并且嵌套多层的宏定义可能识别不出来,导致统计出来的堆栈不太准确,所以把用到的类型往[Eptree設定.dat]里添加,这样就可以得倒准确的堆栈大小了。这里利用[Ep一覧type.txt]和excel来快速得倒类型表(file<<" int ("<<sizeof( int )<<"),"<<endl;)。
- 如果你的代码中有这样的定义{char a[];}那么在结果中就会出现[×]符号,这就是有问题的了,再去确认一下代码。
- 函数的调用关系树可是使用excel来处理,先把调用各级都清晰提取出来,然后通过函数堆栈信息来分析最大的堆栈使用量,excel用的不好,使用笨方法,利用公式:[=VLOOKUP(CONCATENATE(IF(B2="","",B2),IF(C2="","",C2),IF(D2="","",D2),IF(E2="","",E2),IF(F2="","",F2),IF(G2="","",G2),IF(H2="","",H2),IF(I2="","",I2),IF(J2="","",J2),IF(K2="","",K2),IF(L2="","",L2),IF(M2="","",M2),IF(N2="","",N2),IF(O2="","",O2) ),Ep一覧Func!$A:$D,3,FALSE)]