我多年来第一次在工作中做c ++,并试图找出问题所在。我编写了代码,并枚举了在机器上运行的进程并返回了性能指标。我的问题是发生了某种未处理的错误,并且在调试窗口中我得到一条消息,说程序已退出代码0.这是主函数中的代码
int _tmain(int argc, _TCHAR* argv[])
{
while(nRun == 1)
{
try
{
WriteHeartBeat();
DoProcessLoop(dwTotalRAM, nCheckPause, oPMeter, cFileName, oProcess, oCPUUsage, nProcCount, ddsCaps2, lpDD);
CopyPerfFileToDest(cFileName);
nRun = 1;
tEnd = time(NULL);
}catch(...){
AddToLog("Error in Main Function");
}
}
AddToLog("App Stopped");
return 0;
}
该程序运行了很长时间但是过了一段时间它只是回来说它退出了代码0但是“App Stopped”行永远不会打印到日志中。有谁知道我可能有什么样的错误或可能发生什么问题?是尝试捕获块足以捕获可能发生的任何错误,还是我可以做的其他事情。我们非常感谢您提供的任何帮助。
编辑:如果日志文件正确退出,则该文件应从此处获取3个条目。它们是“DoProcessLoop”功能的“正在处理循环”,“CopyPerfFileToDest”功能的“复制文件”和正确停止的“App Stopped”。当我自己正确停止时,我得到所有3行,当它停止不正确时我只在日志中得到“正在处理循环”,然后它以代码0退出。错误必须在那里。我很好奇是否有一个通用的错误陷阱,我可以做任何错误。
答案 0 :(得分:1)
如果从_tmain调用的函数之一调用exit(0):
,就会发生这种情况答案 1 :(得分:0)
有时文件没有正确刷新,所以如果AddToLog函数在退出之前推迟写入文件,那么它可能不会写出值。您可以调试程序以查看是否发生了奇怪的事情,或者添加类似状态的变量并将其设置在catch函数中,然后在最后返回它,因此您可以根据值知道是否存在错误。
答案 2 :(得分:0)
尝试使用布尔值和周围的添加日志更改addtolog的返回值:
boolean logged=false;
while(!logged){
logged = AddToLog("App Stopped");
}
这可能会阻止程序退出,直到写入“App Stopped”,这可能是问题所在。