std :: assert(*)的行为与我使用GNU gdb看到的不同

时间:2017-05-12 22:40:57

标签: c++ gdb assert

我遇到如下SIGABRT错误,

   Program received signal SIGABRT, Aborted.
   0x00007fffe65d8c37 in __GI_raise (sig=sig@entry=6)
       at ../nptl/sysdeps/unix/sysv/linux/raise.c:56

然后我用gdb找到有问题的代码,

  std::assert (address.m_len <= MAX_SIZE);
  std::assert (m_len <= MAX_SIZE);
  std::memcpy (m_data, address.m_data, m_len);

gdb显示address.m_len&lt; = MAX_SIZE和m_len&lt; = MAX_SIZE没有问题如下,但断言仍然失败。

52      m_len (address.m_len)
(gdb) n
54    NS_ASSERT (address.m_len <= MAX_SIZE);
(gdb) n
55    NS_ASSERT (m_len <= MAX_SIZE);
(gdb) n
56    std::memcpy (m_data, address.m_data, m_len);
(gdb) p address.m_len<=MAX_SIZE
$1 = true
(gdb) p m_len<=MAX_SIZE
$2 = true
(gdb) n
57  }
(gdb) n
assert failed. cond="address.m_len <= MAX_SIZE", file=../src/network/model/address.cc, line=54
terminate called without an active exception

Program received signal SIGABRT, Aborted.
0x00007fffe65d8c37 in __GI_raise (sig=sig@entry=6)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:56

有人可以给我一些建议来找出m_len会发生什么吗?

0 个答案:

没有答案