C++ gdb7.5(osx):Can';t从库函数访问源代码

C++ gdb7.5(osx):Can';t从库函数访问源代码,c++,macos,debugging,gdb,C++,Macos,Debugging,Gdb,gdb新手在这里,所以我希望我没有忽略一些显而易见的事情…(如果我忽略了,也许一个善良的灵魂可以指出它?;) 我正在调试一个在OX X狮子下的GCC C++应用程序。由于STL非常繁重,我非常希望使用支持python的GDB版本(即>=v7)来漂亮地打印容器。我的应用程序分为一个后端库(.dylib),负责所有繁重的工作,还有一个非常简单的前端应用程序。所有的源代码和二进制文件都在一个公共源代码路径下,所有的代码都是用调试符号编译的(我尝试了-g和-ggdb) 使用XCode中的GDB版本(标识

gdb新手在这里,所以我希望我没有忽略一些显而易见的事情…(如果我忽略了,也许一个善良的灵魂可以指出它?;)

<>我正在调试一个在OX X狮子下的GCC C++应用程序。由于STL非常繁重,我非常希望使用支持python的GDB版本(即>=v7)来漂亮地打印容器。我的应用程序分为一个后端库(.dylib),负责所有繁重的工作,还有一个非常简单的前端应用程序。所有的源代码和二进制文件都在一个公共源代码路径下,所有的代码都是用调试符号编译的(我尝试了-g和-ggdb)

使用XCode中的GDB版本(标识为“GNU GDB 6.3.50-20050815(Apple版本GDB-1820)”),在回溯中显示帧的源行,无论相应的调用是在前端应用程序中还是在后端库中进行,都可以按预期的方式进行:

(gdb)f 12

#在/Development/workspace/FL3D/libfl3d/Resource.cpp:234处的FL3D::Resource::createMesh(this=0x7fff5fbff7c8,FL3D=@0x7fff5fbff1f8,id=)中的12 0x000000010002ddc5

234 std::vector&t=在(i)处的纹理索引

(gdb)

到目前为止还不错。另一方面,GDB 7.5和7.4.1拒绝给我库中的任何源代码行:

(gdb)f 12

#FL3D::Resource::createMesh\中的12 0x000000010002ddc5(FL3D::FL3DParser&,std::string)() 来自/Development/workspace/fl3d/libfl3d/build/libfl3d.dylib

(gdb)

我真的被给出的不同响应弄糊涂了——gdb6打印到源文件的正确路径和正确的行,而gdb7获得了正确的函数原型(假定是从.dylib的调试符号读取的?),但似乎对源代码一无所知。不过,有趣的是,它确实显示了前端的main()函数中调用的相应源代码行

我已经尝试过用“dir libfl3d”手动设置库源文件的路径,但这并没有改变任何事情。我还注意到,当我运行应用程序时,gdb6有几次说“读取共享库的符号”,而gdb7没有——但符号似乎不是问题所在,因为两个版本似乎都正确地解决了这些问题


我在这里束手无策。有指针吗?

苹果gdb显示调试信息,因为它知道如何在这个平台上查找和解析DWARF。您正在展示的gdb版本7是一个gdb,它不知道如何在Mac OS X系统上找到DWARF调试信息——您在上面展示的输出是没有调试信息的样子。我的猜测是,对Mac OS X的FSF gdb版本7支持还没有引起太多的注意,我不太愿意推荐在这个平台上使用它

正如bames53所指出的,此时在Mac OS X上使用LLDB要好得多。正是调试器支持所有的工作,Objto-C/C++容器支持正在迅速地添加到LDLDB中,而不是GDB。苹果提供的gdb已经走到了尽头,将来所有用户都将切换到LLDB


尝试一下lldb。虽然有点不同,但相当不错。有一个很多人一开始就觉得有用的备忘单,它显示了gdb和lldb命令的等效性

如果您想要一个带有python支持的调试器,苹果会提供Xcode。