2012-01-30 62 views
0

我得到核心轉儲在下面的代碼部分:代碼轉儲

void Debug::writeToFile() 
{ 
_ptrMutex->getLock(); 
write(_fd,_cacheStr.c_str(),_cacheStr.size()); 
_cacheStr = ""; //flush the write string 
_ptrMutex->releaseLock(); 
} 

和核心發生過一次和堆棧轉儲如下

Thread 1 (Thread 8426): 
#0 0x00a2a402 in __kernel_vsyscall() 
#1 0x0072bdf0 in raise() from /lib/libc.so.6 
#2 0x0072d701 in abort() from /lib/libc.so.6 
#3 0x0545651a in ??() from /usr/lib/libstdc++.so.6 
#4 0x05456552 in std::terminate()() from /usr/lib/libstdc++.so.6 
#5 0x0545668a in __cxa_throw() from /usr/lib/libstdc++.so.6 
#6 0x053ed1ef in std::__throw_length_error(char const*)() from /usr/lib/libstdc++.so.6 
#7 0x0543211d in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&)() from /usr/lib/libstdc++.so.6 
#8 0x05433e28 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned int, unsigned int, unsigned int)() from /usr/lib/libstdc++.so.6 
#9 0x05433fca in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace_safe(unsigned int, unsigned int, char const*, unsigned int)() from /usr/lib/libstdc++.so.6 
#10 0x05434065 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(char const*, unsigned int)() from /usr/lib/libstdc++.so.6 
#11 0x0815e9a8 in Debug::writeToFile()() 
#12 0x08161866 in Debug::LOG_PRINT_ERROR(char*, ...)() 
#13 0x0812bcc6 in DimInternalMsgHandler::handlePeerStatusIndication(DimPeerStatusInd*)() 
#14 0x0812c52a in DimInternalMsgHandler::handleInternalMessage(unsigned char*, int)() 
#15 0x0812aa05 in DimDanIfController::handleInMessage(NwPacket&)() 
+1

核心轉儲是由未捕獲的異常引起的。你認爲你可以將函數包裝在異常處理程序中並打印.what()消息嗎?至於爲什麼會發生異常,我不知道 - 但最有可能的是,當您嘗試寫入字符串對象時,您的字符串對象是無效的。我建議使用內存調試器,如Valgrind。 – user450018 2012-01-30 11:16:44

+0

查看libstdC++中的代碼,異常消息可能不會說太多。但是拋出的異常表明在字符串賦值中需要的新字符串緩衝區所需的大小大於字符串的最大大小,除非內存已損壞,否則這是毫無意義的。 – user450018 2012-01-30 11:21:49

+0

[將空字符串分配給字符串變量時面臨核心轉儲]的可能重複(http://stackoverflow.com/questions/9061539/facing-core-dump-while-assigning-the-empty-string-to-string-變量) – dmckee 2012-01-30 17:49:50

回答

1

我懷疑的問題是與writeToFile()本身。

我可以看到幾種可能性:

  1. 第一種可能性是,_cacheStr已損壞,可能是由於內存錯誤別處。

  2. 第二種可能性是另一個線程同時修改_cacheStr。我可以看到writeToFile()受互斥鎖保護,但其他任何可以修改的地方都需要這樣做。

+0

有Debug類成員函數,所有函數在對其數據成員進行任何操作之前都使用互斥鎖。 – 2012-01-31 03:58:49