OS X 10.9:无法调试用g ++编写的c ++动态库

时间:2014-02-08 14:51:27

标签: c++ macos gdb shared-libraries

我在这里阅读了多篇关于os x上的动态库和使用gdb进行调试的帖子。但我仍然无法弄清楚为什么我无法调试一个简单的测试用例。

主要问题是,当我启动GDB时,它永远不会加载任何共享库。

更新:我已经尝试过使用GDB从macports,从homebrew开始,并从源代码构建,行为是一样的。

我有一个我编译成库的类。

Test.hpp

class Test {
public:
  void set(int i);
  void out() const;
private:
  int i;
};

Test.cpp的

#include "Test.hpp"
#include <iostream>

void Test::set(int ii) { i = ii; }

void Test::out() const {
  auto j = i * 100;
  std::cout << i << ", " << j << "\n";
  ++j;
  std::cout << i << ", " << j << "\n";
}

我编译它并使用g ++创建一个库。 注意:行为与macports gcc和xcode中的gcc相同。

/opt/local/bin/g++-mp-4.8 -O0 -g -ggdb -Wall -c -std=c++11 -o Test.o Test.cpp
/opt/local/bin/g++-mp-4.8 -dynamiclib -o libTest.dylib Test.o

然后我用这个简单的主

测试它
#include "Test.hpp"

int main() {
  Test t;
  auto x = 4;
  t.set(x);
  t.out();
  return 0;
}

这是编译并与

链接
/opt/local/bin/g++-mp-4.8 -O0 -g -ggdb -Wall -c -std=c++11 -o main.o main.cpp
/opt/local/bin/g++-mp-4.8 -L . -o testing main.o -lTest

所有内容都按预期编译并运行。但是当我尝试使用gdb调试它(从macports安装,或从源安装,行为是相同的)时,我遇到了问题。

当我逐步浏览main时,如果我调用info sharedlibrary,它总是说“此时没有加载共享库。”,所以它显然从未加载libTest.dylib。因此,我无法进入任何Test成员函数或在libTest.dylib中的任何位置创建断点。

1 个答案:

答案 0 :(得分:1)

事实上,由于某些原因从macports安装的ggdb不尊重DYLD_LIBRARY_PATH。但是,如果使用.dylibs的正确路径“修补”可执行文件,则应该能够使用ggdb进行调试。看看this question,特别是Akos Cz的答案。