我在这里阅读了多篇关于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
中的任何位置创建断点。
答案 0 :(得分:1)
事实上,由于某些原因从macports安装的ggdb不尊重DYLD_LIBRARY_PATH。但是,如果使用.dylibs的正确路径“修补”可执行文件,则应该能够使用ggdb进行调试。看看this question,特别是Akos Cz的答案。