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

时间:2014-04-30 08:31:49

标签: c++ file crash wxwidgets file-monitoring

我正在读取一些安装程序正在连续写入的日志文件。但是,在某些情况下,我会因为以下原因而随机崩溃:

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);
}

1 个答案:

答案 0 :(得分:0)

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

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

WXT(" GOT ::&#34)+ STR

尝试将其更改为2个真正的字符串

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

此致