程序不定时崩溃,原因不好找,采用eurekalog分析,图片如下,高手分析下。

jixiaoqiang 2012-01-03 08:19:09
程序不定时崩溃,原因不好找,采用eurekalog分析,图片如下,高手分析下。


系统不定时崩溃,有时候工作1天都没问题,并且也对addsysmsg函数有调用,但有时候就弹出错误对话框,提示内存read错误,导致程序崩溃。

addsysmsg1的代码:
void __fastcall TFmMain::AddSysMsg1(String Caption)
{
try
{
if(bQuit) return;
cmd_1->CommandText="insert into xms_log (logtime,content) values ('" + FormatDateTime("yyyy-MM-dd HH:mm:ss",Now()) + "','" + Caption + "')";
cmd_1->Execute();
//SaveXmsLog(FormatDateTime("yyyy-MM-dd HH:mm:ss",Now()),Caption);
}catch(Exception &e)
{
//FmMain->AddSysMsg("AddSysMsg:" + e.Message);
}
}
...全文
294 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenspan 2012-01-08
  • 打赏
  • 举报
回复
EvtHander不是主线程(是DLL中创建的线程),不应该直接在该函数中直接处理VCL,应该Post到主线程
greenspan 2012-01-08
  • 打赏
  • 举报
回复
DONJIN Keygoe?
ccrun.com 2012-01-03
  • 打赏
  • 举报
回复
是否用到了多线程?
fbmsyu 2012-01-03
  • 打赏
  • 举报
回复
换成Fastmm编译试试。
缘中人 2012-01-03
  • 打赏
  • 举报
回复
估计cmd_1在这个上面,其他的代码貌似无问题。
cmd_1是不是动态创建的?
jixiaoqiang 2012-01-03
  • 打赏
  • 举报
回复
cmd_1是窗体上的组件,一般情况下也执行到了这个函数,并且不会报错。

就是长时间运行后,出上面的错误。


这个evthandler是个全局函数(非FmMain成员),调用的是FmMain窗体上的组件进行操作。
jixiaoqiang 2012-01-03
  • 打赏
  • 举报
回复
使用的是cb6
ydlchina 2012-01-03
  • 打赏
  • 举报
回复
如果你用的是CB2009或以后的版本。,注意一下Unicode的问题,很多时候都是由它引起的
jixiaoqiang 2012-01-03
  • 打赏
  • 举报
回复
是的,ccrun,但是我没有开启,用的别人提供的动态库。我是只管在EvtHandler函数中进行处理的,
这个EvtHandler据说是多线程激发,但我用的设置是单线程的。
程序运行原理是底层组件一直激发Evthandler函数,我只要在handler内进行处理就行了。

在普通情况下测试,系统工作正常,当长时间运行,就报上述错误,引起程序崩溃。
怀疑也是多线程的问题,但是不知道该怎么跟踪处理。还有上面报的错误屏幕可以看出来什么信息吗?

上面提示的是不是指错误出在DoSelService_Manual调用addsysmsg1函数出错了?

问题比较复杂,描述的可能不是很清楚

DJ_Void EvtHandler(DJ_U32 esrParam)
{
try
{
DoEvt_QueryDevice_ToGetDevID(evt);
DoEvt_QueryOneDspEnd_ToOpenDev(evt);
DoEvt_OpenDevice_ToResetDevAndInitLv(evt);
DoEvt_DeviceState(evt);


try
{
DoEvt_CallIn(evt);
DoSelService_Manual(evt);
DoSelService_Auto(evt);
}
。。。
。。。
}
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧