Debugging 如何进行库的源代码级调试
我有以下设置。虽然我的工作设置是在Windows主机上处理ARM编译器Real View Developer Suite(RVDS)3.2,但这种情况对于任何主机上的任何其他C编译器都是通用的 我在Windows主机上使用RVDS3.2编译器工具链构建了一个C代码的ARM库(静态库-.a文件)。然后,我使用Linux主机上的ARM Linux编译器工具链将该库与应用程序链接,以获得ARM可执行文件。现在,当我尝试在Linux上使用gdb调试生成的ARM可执行文件时,通过尝试在链接的库中存在的某个函数中放置断点,gdb无法在那里放置断点,因为找不到源代码。因此,我手动复制了用于在可执行文件所在的Linux文件夹中创建库的所有源文件(*.c)。gdb仍然无法设置断点。 所以现在我开始想:Debugging 如何进行库的源代码级调试,debugging,embedded,gdb,cross-compiling,Debugging,Embedded,Gdb,Cross Compiling,我有以下设置。虽然我的工作设置是在Windows主机上处理ARM编译器Real View Developer Suite(RVDS)3.2,但这种情况对于任何主机上的任何其他C编译器都是通用的 我在Windows主机上使用RVDS3.2编译器工具链构建了一个C代码的ARM库(静态库-.a文件)。然后,我使用Linux主机上的ARM Linux编译器工具链将该库与应用程序链接,以获得ARM可执行文件。现在,当我尝试在Linux上使用gdb调试生成的ARM可执行文件时,通过尝试在链接的库中存在的某个
您可以尝试看看模仿完全相同的目录结构是否有效。如果您不确定编译器在可执行文件的调试信息中注释了什么目录结构,您可以始终使用
dwarfdump
(在linux上)查看它。首先,GDB不需要任何源代码在函数上设置断点;所以你对实际发生的事情的描述可能是不准确的。首先,我要验证您想要中断的函数是否在二进制文件中:
nm /path/to/app | grep function_desired
其次,要进行源代码级调试,GDB需要GDB能够理解的格式的调试信息。在Linux上,这通常意味着
DWARF
或stab
。很可能您的RVDS编译器不发出此类调试信息;如果是这样,则无法进行源代码级调试。是否在构建库时启用了调试(-g
选项)?如果没有这一点,将很难识别行等。我发现-fPIC会导致此类问题,但我发现唯一的解决方法是在我想要调试时不使用-fPIC。IIRC源路径与编译器执行的目录(对于gcc)相关。换句话说,编译器在命令行上获得的路径。