65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 GDB 进行远程调试

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (13投票s)

2006 年 7 月 29 日

CPOL

2分钟阅读

viewsIcon

85738

downloadIcon

647

关于使用 GDB、DDD 和 GDBserver 进行远程调试的简要描述

什么是远程调试?

如果您尝试调试在无法以通常方式运行 GDB 的机器上运行的程序,则使用远程调试通常很有用。例如,您可能在操作系统内核或小型系统上使用远程调试,这些系统没有足够强大的通用操作系统来运行功能齐全的调试器。

如何执行远程调试?

何时需要进行远程调试?

远程调试在以下场景中很有用

  1. 当应用程序在资源非常有限的设备上运行时,并且您希望对其进行调试(为了快速操作)。
  2. 用于调试对支持工具有限的嵌入式应用程序。

一个调试示例设置

我将举一个例子来详细解释远程调试。假设您想从 x86 Linux 机器上调试目标 PowerPC Linux 机器上的应用程序。上述场景所需的工具。

主机端(这里客户端是 Linux x86 机器)

  1. 用于易于调试的图形界面的标准 DDD。
  2. 支持目标平台的 Gdb。(在这种情况下,gdb 应该支持 PowerPC)。您可以检查如下所示的受支持的架构

  3. 带有调试信息的编译二进制文件(使用“-g”选项为目标 PowerPC 编译)

目标端

  1. 编译的二进制文件(显然)。这些二进制文件可以带有或不带有调试信息。
  2. 目标设备的 Gdbserver。

调试设置如下所示

调试设置序列 (TCP/IP)

  1. 在目标设备上启动应用程序和 gdbserver。
    例如:“gdbserver 192.168.0.30:10000 myapplication”
  2. 在 Linux 机器上启动 DDD。忽略警告。
  3. 现在连接到目标设备上的 gdbserver。
    例如:“target extended-remote 10.47.199.199:10000 myapplication”
  4. 按(或键入)continue,因为应用程序已经在目标设备上启动了。(不要按 run)。在您需要的地方设置断点并享受吧。

注释

  1. GDB 在调试期间默认在两个目录中搜索源文件。$cdir – 编译目录和 $cwd – 当前工作目录。如果您正在使用交叉编译器并在另一台机器上编译二进制文件,则 $cdir 路径将无效。在这种情况下,您可以为源添加其他路径。或者您可以更改目录到源文件的位置。这非常重要,特别是如果您在不同的目录中有许多共享库。

  2. 当您启动 gdb 并连接到远程 gdbserver 时,您必须使用 'continue' 而不是 'run',因为程序已经在目标设备上启动了。
  3. 只要您保留本地 gdb 使用的未剥离二进制文件,就可以在远程系统上运行剥离的二进制文件。这一点非常重要,因为使用 -g 编译的未剥离二进制文件可能太大而无法容纳在某些嵌入式设备上。
  4. 如果同一目标机器上有多个用户(例如,在我们的项目的情况下),请联系系统管理员为所有用户创建调试端口。

历史

  • 2006 年 7 月 29 日:初始发布
© . All rights reserved.