监视日志文件(C++)时崩溃

Crash while monitoring a log file (C++)

本文关键字:崩溃 C++ 日志 文件 监视      更新时间:2023-10-16

我正在读取一个日志文件,该文件正由一些安装程序进程连续写入。然而,在某些情况下,我会遇到随机崩溃,原因如下:

Crash reason:  EXCEPTION_ACCESS_VIOLATION_READ

我对此有几个问题-

1:如果您看到以下代码,我将尝试处理在阅读时发生的任何异常。那么,为什么EXCEPTION_ACCESS_VIOLATION_READ没有被捕获并且程序崩溃呢。

2:这看起来像是因为安装程序在我读取文件的同时写入文件。wxTextFile不允许我使用打开文件的模式。那么,如果我使用一些C函数并以READ_ONLY模式打开文件,这种崩溃还会发生吗?

以下是我的代码:

wxTextFile file( wxT("C:\logfile.log") );    
WriteLog(wxT("Will start monitoring log file."));
while(true)
{   
    if(file.Exists())
    {
        try
        {
            if(file.Open())
            {
                wxString str = file.GetLastLine();
                WriteLog(wxT("Got::")+str);
                file.Close();

            }
        }
        catch(...)
        {
            WriteLog(wxT("CRASH: something went wrong::MonitorLogFile()"));
        }
    }
    //Exit if needed
    Sleep(1500);
}

我相信14天后你的问题就解决了,不是吗?

我有一种感觉(我对wxWidgets知之甚少(,你的编译器正在这里执行地址添加

wxT("Got::"(+str

尝试将其更改为2个实际字符串

wxT((是一个解析为L"的宏调用吗?如果是这样的话,那么你就遇到了问题,你应该修改代码,使用真实的字符串对象(而不是宏文本(+第二个字符串对象来执行字符串连接,此时你使用+作为运算符重载,而不是像我怀疑的那样作为地址的总和

问候