定位解决问题/经验/教训(1)-局部变量接指针入参问题
1. 问题:
CLGJ查询规则名遍历失败,gdb跟踪到recv死了
原本以为卡死在socket recv 接口处 定位分析
但是其实是遍历链表卡死
2. 定位分析
xxxFunc(……,XXX_NODE_S *pXXXNode)
{
XXX_NODE_S stTmp ;
stTmp = *pXXXNode;
YYY_LIST_HEAD_S* pList; //YYY_LIST_HEAD_S 是 XXX_NODE_S 结构体的成员list
pList = &(stTmp.list); //这里 用局部指针 接这个局部变量
FOR_EACH(pList.listHead); //遍历这个变量中的链表头进行操作
…… // 这里肯定失败,因为 pList.listHead 是栈上面的地址
……
}
函数中我用了一个局部结构体变量接了指针入参
然后去遍历这个变量中的链表…………
这肯定遍历不了啊,因为结构体变量(栈变量)中只有当前信息
3. 总结:
3.1. 指针入参不需要用局部变量来承接
可以用局部指针来接 这样没问题
但是建议尽量不用局部变量接,直接操作入参指针即可
3.2. 定位问题: 思路要清晰 不能东打一耙,西打一棒
在这里就直接 gdb 跟一个流程下来看问题出在哪里 这样清晰明了
我当时是
gdb 跟了一下 就判断 dlpd 守护进程没问题 而没有详细进去一步一步看
recv 接口死了 就跟 send recv 什么也没有
…………找不到原因了
…………