运行不定长时间,有时候是几天,有时候几小时,程序就无响应了,我自己做的日志也没有任何输出。在金字塔的策略中,有3个类似MID的入口,我都加了__try __except,但是没有任何的输出的。有一次我修改了参数,结果读取参数的时候越界了,就发现日志中有记录的。
我程序的代码片段:
__declspec(dllexport) int WINAPI MID(CALCINFO *calc)
{
int ret;
__try
{
ret = __mid(calc);
}
__except(except_handler(GetExceptionInformation()))
{
}
return ret;
}
int except_handler(LPEXCEPTION_POINTERS excep)
{
int i;
PCONTEXT context;
unsigned long *esp;
context = excep->ContextRecord;
syslog("ebp %x, eip %x, esp %x, esi %x, edi %x, eax %x, ebx %x, ecx %x\n",
context->Ebp, context->Eip, context->Esp, context->Esi,
context->Edi, context->Eax, context->Ebx, context->Ecx);
fflush(fp_syslog);
return EXCEPTION_EXECUTE_HANDLER;
}
这样的东西我们没法去查的,建议你程序使用排除法,削减你的部分代码调用,直到找到具体的出问题的代码段,这样我们才有可能帮你一起来分析问题
有些问题不一定在我的代码里面,你们也总需要提供某种机制,让DLL插件开发者进行调试吧。你们在程序化交易相关的代码上,有没有用上__try __except?或者说是c++中的try catch等,如果用了,在死机前,你们那边应该能得到某种信息吧。就让我们增加,减少一些代码来调试,这个手段未免太过原始了吧。