调试sqlite3数据库,通过web查询数据库时,出现了下面两种现象:
1.查询6分钟间隔的数据,返回 502 BadGateway
2.查询10分钟间隔的数据,最后数据不全(查询1小时数据同样的情况)
3.分析:从502 BadGateway入手,之前调试CGI程序时,出现这个错误基本都是 内存溢出 的问题,查看源代码:
int select_flow_info_difftime(sqlite3 *db,char *table,char *time_start,char *time_end)
{
char sql[100];
char* errmsg;
assert(db);
assert(table);
g_RowD = 0;
int limits = 0;
_process_data_info *p_ProcessDataInfo = NULL;
p_ProcessDataInfo = GetProcessDataInfo();
limits = p_ProcessDataInfo->m_ucBehindDotCount*1440*2;
sprintf(sql,"select * from %s where timer>='%s' and timer<'%s' order by timer asc limit %d",table,time_start,time_end,limits);
if(sqlite3_exec(db,sql,callbackDetF,NULL,&errmsg)!=SQLITE_OK)
{
fprintf(cgiOut,"%s/%s:%d error:%s\n",__FILE__,__FUNCTION__,__LINE__,errmsg);
sqlite3_free((void*)errmsg);
return 0;
}
return g_RowD;
}
这里注意到了char sql[100],直观感觉是这个数组访问溢出了,修改为char sql[256],重新编译,执行,上面两个问题全部解决。