字符串赋值中的代码转储
code dump in string assignment
我在代码的以下部分获得核心转储:
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&) ()
我怀疑问题出在writeToFile()
本身。
我可以看到几种可能性:
-
第一种可能性是
_cacheStr
已经损坏,可能是由于其他地方的内存错误。 -
第二种可能性是存在另一个线程对
_cacheStr
的并发修改。我可以看到writeToFile()
受到互斥锁的保护,但任何其他可以修改_cacheStr
的地方都需要这样做。
相关文章:
- 我不知道为什么这段代码会让核心被转储?
- qt C++命令行代码中的分段错误(核心转储)
- 为什么我的代码包含错误分段错误(核心转储)?
- 为什么我的代码给我一个分段/核心转储错误?
- 有关矩阵的代码错误导致分段错误(内核转储)
- 运行我的代码时出现分段错误(核心转储)问题
- C++代码的分段错误(核心转储)
- WinDBG适用于从Visual Studio 2015保存的转储,但不适用于任务管理器。显示异常代码"not found"
- 执行 N >= 10^7 的代码时出现分段错误(核心转储)错误
- 英特尔引脚:如何生成对象转储ish代码
- 我的指针代码 c++ 中的分段错误(核心转储)
- 这片CPP代码如何转储
- 分段错误(核心转储) - 代码在 VS 中有效,但在 Linux 终端中不起作用
- 如何使用 logcat 以本机代码打印(或转储)包裹
- 在 PQconnectdb C++代码块中中止(核心转储)
- 我收到分段错误(核心转储)错误,但仅当我的一半代码运行时
- 在 Linux 上使用 GCC 4.6 和 4.7 运行简单 std::thread 代码时的核心转储
- 学习指针C++使用以下代码进入核心转储,我真的不知道为什么?
- 字符串赋值中的代码转储
- C++代码转储"random"数据