概述:
在程序开发中,我们可能会遇到一些莫名的死机或者程序错误的执行。如果是死机我们可以看coredump,但是有时候coredump可能是死在C库,我们看不出来啥。这时我们可以加打印,打印出相关变量,用于确定问题所在。这里记录自己一个简单的问题解决的方法。
解决思路:
1,程序在经过一个操作触发后,程序会出现发送的数据发不出或者有时候还会导致死机,看coredump看不出问题,这时我们找到触发会执行的一段代码,详细看一下可能会出问题的地方。
2,在整个程序代码中加上打印,打印出一些相关变量的值,如我们使用的handle句柄,一些指针地址,看看是否值会被篡改或指针地址被修改。如果数组越界或栈溢出可能会导致我们的变量或指针地址被修改,这时就可能句柄改变导致数据发送不出,指针地址改变会在free操作,导致死机这些问题。
3,通过打印信息进行具体代码分析,找出问题所在。(我这次问题就是数组越界导致sessionHandle 值被篡改,数据发不出去,有时候还会把指针地址改了,然后free死机)
备忘:
自己加打印的一个小方式,可以直接快速复制,快速方便,小例子:
printf("[%d][%s]skyj=============response= %p\n", __LINE__, __FUNC__, &response);
printf("[%d][%s]skyj=============sessionHandle %p %d\n", __LINE__, __FUNC__, &sessionHandle, sessionHandle);
printf("[%d][%s]skyj=============pFileInfo= %p\n", __LINE__, __FUNC__, pFileInfo);