C++ OS X 10.9:无法调试c++;用g+制作的动态库+;

C++ OS X 10.9:无法调试c++;用g+制作的动态库+;,c++,macos,gdb,shared-libraries,C++,Macos,Gdb,Shared Libraries,我在这里读过多篇关于OSX上的动态库和gdb调试的文章。但是我仍然不明白为什么我不能调试一个简单的测试用例 主要问题是,当我启动GDB时,它从不加载任何共享库 更新:我从macports、自制和源代码构建的GDB中尝试过这一点,其行为是相同的 我有一个类,我编译成一个库 Test.hpp class Test { public: void set(int i); void out() const; private: int i; }; Test.cpp #include "Test

我在这里读过多篇关于OSX上的动态库和gdb调试的文章。但是我仍然不明白为什么我不能调试一个简单的测试用例

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

更新:我从macports、自制和源代码构建的GDB中尝试过这一点,其行为是相同的

我有一个类,我编译成一个库

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";
}
然后我用这个简单的main测试它

#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

中的任何位置创建断点。事实上,出于某种原因,从macports安装的ggdb不尊重DYLD\u库路径。但是,如果使用.dylibs的正确路径“修补”可执行文件,则应该能够使用ggdb进行调试。看看Akos Cz的答案,尤其是答案。

>sharedlibrary libTest
可能会奏效
设置solib搜索路径
也可能有用。@BrettHale这似乎不起作用
(gdb)设置solib搜索路径/Users/slynch/Programming/cxx\u testing/
(gdb)sharedlibrary libTest没有加载的共享库与模式libTest匹配。
(gdb)sharedlibrary libTest.dylib没有加载的共享库与libTest.dylib模式匹配。
您使用的是哪个版本的GDB?新的GCC经常需要新的GDB。@Potatoswatter我正在使用macports安装的GCC和GDB。gcc版本为4.8.1。gdb是7.6版,版本信息中还列出了“此gdb配置为”x86_64-apple-darwin13.0.0”。很简单,但请尝试链接:
main.o-o testing-Wl,-rpath-Wl,-L.-lTest
/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