核心文件完全废话或者这段代码真的抛出了SIGFPE吗?

时间:2010-11-16 20:47:16

标签: c++ debugging gdb core sigfpe

我的核心文件声称已从

抛出SIGFPE

GCC-4.3.4 /包括/ C ++ / 4.3.4 /比特/ stl_iterator_base_funcs.h

在第176行。这是:

  template<typename _InputIterator, typename _Distance>
    inline void
    advance(_InputIterator& __i, _Distance __n)
    {
          // concept requirements -- taken care of in __advance
176---->  typename iterator_traits<_InputIterator>::difference_type __d = __n;
          std::__advance(__i, __d, std::__iterator_category(__i));
    }

这是我所拥有的另一个函数,它实际上是通过不执行任何浮点运算的代码调用高级函数。代码是使用优化编译的(但是有调试符号),所以事情可能会很混乱。

我的核心文件只是告诉我完全无稽之谈,还是有一种方法可以理解?

1 个答案:

答案 0 :(得分:2)

在回答我自己的问题时,发生的事情是优化器采用了这样的代码:

int which = RANDOM % somecontainer.size();
std::advance(it, which);

并将它们组合在一起。这就是为什么看起来信号是从std :: advance内部引发的。根据Oli的评论,即使模数不是浮点运算,当模数相对于0时也可以发生SIGFPE。有一个不同的错误,允许somecontainer在一个角落的情况下是空的。