我的问题是从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相同。