3

gdb用来调试针对静态库编译的程序。库和程序都是用调试符号编译的。对于这个库,gdb只看到文件中实现的源代码,.h而不是文件中实现的源代码.cpp。我想知道为什么?

  • 例如

    (gdb) info sources
    

    仅列出该库中的头文件而没有.cpp文件。

  • 我能够为.cpp文件中实现的某些函数设置断点。例如gdb理解这个命令:

    (gdb) break orgQhull::Qhull::runQhull,
    

    但是,无法调试该函数体内的代码。(只能使用该stepi命令在汇编程序级别单步执行各个指令。)另一方面,调试器能够看到在头文件中实现的函数代码。

  • 该命令报告前面提到backtrace的函数“没有可用的符号表” :runQhull

    (gdb) backtrace full
    
    #0  0x00000000004d361a in orgQhull::Qhull::runQhull(orgQhull::RboxPoints const&, char const*) ()
    No symbol table info available.
    #1  0x000000000049573a in ConvexHull::ConvexHull (this=0x7fffffffcb70, tree=..., begin=..., end=...)
        at /home/filip/fel/dp/sandbox/src/populating_octomap/include/ConvexHull.h:40
    

这可能是什么原因?欢迎任何建议!

一些细节:

  • 有问题的图书馆是 Qhull 的libqhullcpp.a,来源为git://gitorious.org/qhull/qhull.git
  • 系统:带有 GNU/Linux 3.2.0-40-generic #64-Ubuntu SMP x86_64 的 Ubuntu 12.04.2 LTS
  • gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
  • GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
4

1 回答 1

1

这可能是什么原因?

任何一个

  • 您已经构建了没有 -g标志的库,或者
  • 您在构建库后剥离了它(这不太可能)。

检查您的库构建日志。你相信你是用 构建的-g,但你可能错了。

于 2013-05-01T23:10:40.240 回答