GDB在OSX上使用带有GCC 4.9的BOOST库时无法找到帧

时间:2015-04-17 15:15:31

标签: boost gdb g++ osx-yosemite

我的问题是从Eclipse调试一个使用Boost的程序(甚至是纯标头),然后GDB调试器无法找到要跟踪的函数的帧基。

请注意,除此之外,该程序在调试和发布模式下的功能类似于魅力。问题仅在于调试和检查引用Boost的源代码。

请注意,此问题仅影响OSX Yosemit。

问题是我看不到局部变量的值。下面是我在Eclipse的“(x)= Variables”窗口中的消息:

Failed to execute MI command:
-data-evaluate-expression result
Error message from debugger back end:
Could not find the frame base for "main()".

代码简单如下:

#include <boost/regex.hpp>
#include <iostream>
int main() {
   int result = 1;
   boost::regex reExpression("[a-z]+");

   std::cout << "!!!Hello World !!!" << std::endl;
   result ++;

  cout << " Result = " << result << "\n";
  return result;
}

使用以下命令编译程序:

g++ -v -o -g bin/Essai-MACOS-Debug  src/Essai.cpp -I/opt/local/include /opt/local/lib/libboost_regex-mt.a

如果删除对Boost.Regex的引用,那么一切正常。我可以检查局部变量结果的值。

更有趣的是:我使用依赖于Boost的单个函数构建了一个库,并从main()调用该函数。碰巧可以检查main()中的代码并且具有main的局部变量的值但是当我进入库的函数时,现在引用boost的那个然后我再也看不到该函数的局部变量。

所以看来,只要源文件引用Boost,GDB就会感到困惑。

我在OSX Yosemit上使用MacPort安装了GCC 4.9,GDB 7.7和Boost 1.57。

我使用MacPort从源代码编译Boost,以便使用GCC代替GCC:

sudo port install -ns boost config.compiler = macport-gcc-4.9

我也试过自己编译的Boost版本,但确实有同样的问题。

有谁知道这个问题?

修改 我已经从源代码(7.9)编译并安装了最后一个GDB版本,并且这里描述的问题与MacPorts提供的7.7.1相同。

0 个答案:

没有答案