解决程序越界或栈溢出导致的死机或不正常问题排查的一个方法

概述:

     在程序开发中,我们可能会遇到一些莫名的死机或者程序错误的执行。如果是死机我们可以看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);

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值