主界面函数快速循环往数据库里写数据
write_data(pBuffer2, temp1, length1);
其中的temp1放在单独的cpp里中一个函数作集中处理void unix_to_date(unsigned long long time, char * date)
{
unsigned long long second = time / 1000;
unsigned int milli = time % 1000; time_t timeT = (time_t)second; if (timeT>100000000000)
{//输出调试信息

}
struct tm *ptime;
ptime=localtime(&timeT);

if (ptime == NULL)
{//输出调试信息

}
strftime(date, DATE_TIME_STRING_LENGTH + 1, "%Y-%m-%d %H:%M:%S", ptime);//这里的data是需要最终要返回的时间数据
//strftime(date, 100, "%Y-%m-%d %H:%M:%S", ptime);
char milli_str[5];
sprintf(milli_str, ".%03d", milli);
strcat(date, milli_str);
}
程序执行过程中(循环写入非常快),到一定时间就会崩溃,问题出在ptime为空值,查看timeT和传递的time值为一个很大的值,此时如何查看主界面函数中的出问题的值,添加监事提示超出范围!!
由于程序运行很快,看不清到底主界面执行到哪次循环出的问题,而且这个循环次数是很大的

解决方案 »

  1.   

    添加 ASSERT  断言, 调试版本下就会弹窗, 然后点击重试就可以看调用堆栈了
    if(xxxxxx )
    {
      //参数错误
      ASSERT(FALSE);
    }
      

  2.   

    ptime=localtime(&timeT);
    ASSERT(ptime != NULL );
      

  3.   

    ASSERT以后可查看?
      

  4.   

    Convert a time value and correct for the local time zone. More secure versions of these functions are available; see localtime_s, _localtime32_s, _localtime64_s.
    也就是 localtime 可能有不安全因素, 建议使用 localtime_s
      

  5.   

    DebugBreak();