2

我有以下设置。尽管我的工作设置在 Windows 主机上处理 ARM 编译器 Real View Developer Suite (RVDS) 3.2,但对于任何主机上的任何其他 C 编译器来说,这种情况都是通用的。

我在 Windows 主机上使用 RVDS 3.2 编译器工具链构建了 C 代码的 ARM 库(静态库 - .a 文件)。然后,我将这个库与使用 Linux 主机上的 ARM-Linux 编译器工具链的应用程序链接,以获得 ARM 可执行文件。现在,当我尝试使用 gdb 在 Linux 上调试此生成的 ARM 可执行文件时,尝试在链接的库中存在的某个函数中放置断点,gdb 无法在此处放置断点,因为找不到源。所以我手动复制了所有用于在可执行文件所在的 Linux 文件夹中创建库的源文件 (*.c)。gdb 仍然无法设置断点。所以现在我开始思考:

  1. 如何通过在 gdb 中启动通过将此库链接到应用程序而生成的可执行文件,使用不同的编译器链在 Windows 上创建该库的源代码级调试。可能吗?我该怎么做?RVDS 编译器工具链中是否有任何编译器选项可启用此库源代码级调试?

  2. 我是否需要将源文件复制到 linux 中与这些源文件在 windows 中完全相同的文件夹结构中?

4

4 回答 4

1

您可以尝试查看模仿完全相同的目录结构是否有效。如果您不确定编译器在可执行文件的调试信息中注释的目录结构,您可以随时查看它dwarfdump(在 linux 上)。

于 2009-04-01T15:04:57.583 回答
1

首先,GDB不需要任何源码来给函数设置断点;所以你对实际发生的事情的描述可能不准确。我将首先验证您要中断的函数是否确实存在于二进制文件中:

  nm /path/to/app | grep function_desired

其次,要进行源代码级调试,GDB 需要 GDB 能够理解的格式的调试信息。在 Linux 上,这通常意味着DWARFSTABS。您的 RVDS 编译器很可能不会发出此类调试信息;如果是这样,将无法进行源代码级调试。

于 2009-04-04T22:16:19.513 回答
1

您是否在启用调试的情况下构建了库(-g选项)?否则,将难以识别线条等。

于 2009-04-04T22:26:26.650 回答
1

我发现 -fPIC 会导致此类问题,但我发现的唯一解决方法是在我想调试时不要使用 -fPIC。

于 2015-11-03T23:13:12.633 回答