奇怪的应用程序崩溃

时间:2013-08-23 09:55:38

标签: c++ ubuntu-10.04

我在 Ubuntu Lucid 10.04.3 LTS 上运行这个C ++应用程序,它崩溃了,原因真的让我失望了。

表现出失败的方法是这样的:

void
IoLogikCommunicator::processPacket(char const* data, WORD wSize)
{
  std::string message(data, wSize);
  std::stringstream ss(message);
  std::string token;

  std::vector<std::string> tokens;
  while (std::getline(ss, token, '#'))  // <- crash
    tokens.push_back(token);

  if (tokens[0] == "SENSORS")
      processSensorsPacket(tokens);
  else if (tokens[0] == "SELECTOR")
      processSelectorPacket(tokens);
}

根据核心转储,data内容有效且为:

p data
$1 = 0xb7520214 "SENSORS#192.168.107.62#DI:00#ON#DI:01#ON#DI:02#ON#DI:03#OFF#DI:04#OFF#DI:05#OFF"

p wSize
$2 = 79

崩溃时tokens的内容为["SENSORS"],因此第一个元素已正确解析。

接下来会发生什么:

Program terminated with signal 6, Aborted.
#0  0x009de422 in __kernel_vsyscall ()
(gdb) bt
#0  0x009de422 in __kernel_vsyscall ()
#1  0x0766a651 in raise () from /lib/tls/i686/cmov/libc.so.6
#2  0x0766da82 in abort () from /lib/tls/i686/cmov/libc.so.6
#3  0x076a149d in ?? () from /lib/tls/i686/cmov/libc.so.6
#4  0x076ab591 in ?? () from /lib/tls/i686/cmov/libc.so.6
#5  0x076ae710 in ?? () from /lib/tls/i686/cmov/libc.so.6
#6  0x076aff9c in malloc () from /lib/tls/i686/cmov/libc.so.6
#7  0x0070dc07 in operator new(unsigned int) () from /usr/lib/libstdc++.so.6
#8  0x006e7d06 in std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) () from /usr/lib/libstdc++.so.6
#9  0x006e9f70 in std::string::_M_mutate(unsigned int, unsigned int, unsigned int) () from /usr/lib/libstdc++.so.6
#10 0x006c4274 in std::basic_istream<char, std::char_traits<char> >& std::getline<char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char) () from /usr/lib/libstdc++.so.6

鉴于 SIGABRT ,看来assert()在malloc调用中失败了,但原因可能是什么?当然,我不可能重现这个错误:这个方法每秒被调用几次,应用程序在连续运行30天甚至更长时间后崩溃。

然后,相同的数据由另一台托管在另一台机器上的相同应用程序处理:那台机器没有崩溃。

你有任何建议/提示/提示/指针吗?

0 个答案:

没有答案