相关疑难解决方法(0)

如何在Mac OS X上运行自制的GDB版本?

我正在尝试使用gdb在Eclipse中调试C++程序.我认为它在我的main()函数中工作正常,但是在我尝试查看变量的值时,它会给我一个警告:

Failed to execute MI command:
-data-evaluate-expression variable
Error message from debugger back end:
Could not find the frame base for "Class::method()".`
Run Code Online (Sandbox Code Playgroud)

在搜索互联网之后,我很难理解这个错误的含义或找出如何解决问题.Stack Overflow 还有一些类似的问题(这里这里).

由于Apple的Xcode命令行工具已经过时了(请参阅gccgdb问题),我需要使用自己的自制版本.我不知道这些工具的设置中是否有我可能错过的东西.

我可以使用gdb从命令行调试,我遇到了同样的错误:"Could not find the frame base for "Class::method()"所以我很确定它不是Eclipse的问题.

是否有任何事情可能导致这个问题?

  • Mac OS X 10.8.5(Mountain Lion)
  • Eclipse 4.2.1(Juno)
  • GCC 4.8.2(家酿)(与-O0-g3)
  • gdb 7.6.2(自制和编码)

更新:

我也看到了这条线:

BFD: /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork(i386:x86-64): unknown load command 0x20
Run Code Online (Sandbox Code Playgroud)

接下来是几个警告:

warning: Could not open OSO archive file "/private/tmp/gcc48-KqoQ/gcc-4.8.2/build/x86_64-apple-darwin12.5.0/libstdc++-v3/src/../libsupc++/.libs/libsupc++convenience.a"
warning: …
Run Code Online (Sandbox Code Playgroud)

c++ macos homebrew gcc gdb

20
推荐指数
1
解决办法
2399
查看次数

如何使用MacPorts在MacOS Lion上设置/使用GDB 7

我在MacOS Lion上使用GDB 7(7.3)遇到了麻烦.

我做的是:

$ sudo port install gdb
Run Code Online (Sandbox Code Playgroud)

之后将GDB安装到:/ opt/local/bin/ggdb

但是当我尝试执行GDB时,我总是在开始时收到以下内容:

BFD: unable to read unknown load command 0x24
BFD: unable to read unknown load command 0x26
BFD: unable to read unknown load command 0x24
BFD: unable to read unknown load command 0x26
Run Code Online (Sandbox Code Playgroud)

进一步它告诉我:

从......完成阅读符号.

但是当我试图通过'bt'获得回溯时,我只看到未解决的函数地址.我试图在我的应用程序文件夹中设置LIBRARY_PATH.

$ export DYLD_LIBRARY_PATH=`pwd` 
Run Code Online (Sandbox Code Playgroud)

但没有成功.问题仍然存在.

使用Lion/Xcode提供的默认GDB 6.3可以正常工作.

提前感谢任何建议.

debugging gdb debug-symbols

15
推荐指数
1
解决办法
6653
查看次数

Mac上的gcc 4.7.3和gdb 7.6 - 奇怪的踩踏问题

我最近通过MacPorts在我的OS X 10.7系统上安装了GCC 4.7.3GDB 7.6,以便能够编译C++ 11代码.我不能使用Apple的自制clang ++和gdb,因为它不允许我正确调试标准模板库代码(例如,如果我取消引用列表迭代器,程序崩溃).

现在,通过新的GCC/GDB组合,我在进入函数时遇到了一些奇怪的问题.拿这个最小的例子:

#include <stdio.h>

class A {
public:
    virtual void testMethod() {
        printf("test in A\n");
    }
};

void test(A &a) {
    printf("asdf\n");
    a.testMethod(); // here, stepping works with -std=c++11
}

int main() {
    A a;
    a.testMethod();
    test(a);
    a.testMethod();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我编译代码g++ -O0 -ggdb test.cpp,GDB根本不会介入A::testMethod.我可以通过指定内部的代码行来设置断点A::testMethod,但不能通过指定方法名称(b A::testMethod())来设置断点.

更奇怪的是,如果我编译,如果g++ -O0 -ggdb -std=c++11 test.cpp从中调用,GDB会进入testMethod void test().从主要的,踩踏仍然不起作用.但是,现在,我可以通过仅指定方法名称来设置断点.

此外,一旦我在GDB中启动程序,我就会收到GDB警告,如相关问题中所述.无论是否指定,都会显示这些警告-std=c++11.

warning: Could not …
Run Code Online (Sandbox Code Playgroud)

gdb macports osx-lion c++11 gcc4.7

6
推荐指数
1
解决办法
2075
查看次数

标签 统计

gdb ×3

c++ ×1

c++11 ×1

debug-symbols ×1

debugging ×1

gcc ×1

gcc4.7 ×1

homebrew ×1

macos ×1

macports ×1

osx-lion ×1