タイトルに記載されている状況について、どのような理由が考えられますか? これが私のbtの外観です:
#0 0x00a40089 in ?? () #1 0x09e3fac0 in ?? () #2 0x09e34f30 in ?? () #3 0xb7ef9074 in ?? () #4 0xb7ef9200 in ?? () #5 0xb7ef9028 in ?? () #6 LogFile::Flush の 0x081d45a0 () #7 LogFile::Flush の 0x081d45a0 () #8 LogFile::Close () の 0x081d46e0 #9 LogFile::OpenLogFile () の 0x081d4dbf #10 LogFile::PerformPeriodicalFlush の 0x081d4eb9 () #11 LogFile::StoreRecord () の 0x081d4fca #12 LogFile::StoreRecord () の 0x081d50c2
そしてそれは私に与えますProgram terminated with signal 11, Segmentation fault.
fflush() のラッパーは単純で、何もせず、呼び出しfflash
てエラーをチェックするだけです (返されたコードが <0 の場合)。したがって、セグ フォールトの原因はfflash
. または??
、スタックの一番上にあるため、別の場所にいる可能性はありますか?
OS: RHEL5; gcc バージョン 3.4.6 20060404 (Red Hat 3.4.6-3); 最大デバッグ情報を含む元のexeを使用して、gdbでデバッグしました。
ディスクにスペースがない場合のセグフォルトについては知っていますが、これはそうではありません (アプリケーションのウォッチドッグがあり、プログラムを再起動すると、すべて正常に動作し続けます)。
どんなアイデアも役に立ちます。ありがとう。
編集
void LogFile::PerformPeriodicalFlush( const utils::dt::TimeStamp& tsNow )
throw( LibCException )
{
m_tsLastPeriodicalCheck = tsNow;
struct stat LogFileStat;
int nResult = stat( m_sCurrentFullFileName.c_str(), &LogFileStat );
if ( 0 == nResult && S_ISREG( LogFileStat.st_mode ) )
{
//we successfuly stated the file, so it exists. We can safely perform
//a flush.
try
{
Flush();
return;
}
catch ( LibCException& )
{
OpenLogFile( tsNow );
return;
}
}
else
{
OpenLogFile( tsNow );
}
}
void RotatingLogFile::Flush() throw( object::LibCException )
{
if ( m_pFile != NULL )
{
if ( fflush( m_pFile ) (less_than) 0 )
{
throw object::LibCException();
}
}
}