问题标签 [gdbserver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
326 浏览

gdb - gdb - gdbserver 跟踪远程程序执行

我正在尝试使用本地计算机(windows x86)上的 gdb 和远程目标(arm-linux)上的 gdbserver 提取我的程序(类似于程序计数器)的执行序列。我的想法是在我的源文件的“重要”行(即:在特定函数的开头,更一般地在条件语句之前和之后)插入断点,每个断点的忽略计数很高,然后检查断点是否被命中。用这个方法其实是可以接收到信息的,但是有个问题:我调试的应用行为是实时的,这个具体的方法太慢了程序的执行速度。你认为我可以对 gdb 使用其他方法吗?我偶然发现了跟踪点,这似乎正是我正在寻找的东西,但我无法为他们找到像“命中计数器”这样的属性。我目前使用的gdb版本是7.5。

提前非常感谢。

0 投票
1 回答
954 浏览

gdb - gdbserver 跟踪点臂支持

我为 arm 编译了 gdbserver 7.6:

然后我为 arm 编译了 gdb 7.6:

我编译了我的简单应用程序:

我在板上复制了 gdbserver 和交叉编译的应用程序。从我的电脑(x86-pc-linux)我运行:

在tstart命令之前,行为是“正常的” :我可以根据需要调试应用程序,但无法开始跟踪应用程序。

问题是:gdbserver 支持 arm 的跟踪点还是仅支持 x86/amd_64?

0 投票
1 回答
5258 浏览

linux - 如何使用 gdbserver 进行远程调试?

我有一个程序出现段错误。我需要远程调试。为此,我正在做以下事情:

在目标板上:

在主机 x86 机器上:

但是在运行上述命令后,我收到了许多错误:

我试图在使用它们的主机上设置这些库的路径export LD_LIBRARY_PATH,但仍然没有运气。

任何帮助将不胜感激。

问候,

尤维

0 投票
1 回答
4987 浏览

qt - Qt Creator 2.7.1 和 Qt 4.8.4 无法远程调试库

使用 Qt Creator 2.7.1 和 Qt 4.8.4,我制作了一个 Qt 库和一个简单的 Qt 应用程序,该应用程序可以动态链接到该库。我正在尝试远程部署和调试我的应用程序,并在我调用它们时进入我的库函数。我可以成功设置断点并进行远程调试,但我无法使用调试器 ( gdb ) 进入我的库函数。当我第一次在调试模式下使用 QtCreator 远程启动我的应用程序时,我遇到了以下警告:

我的调试器是使用 QtCreator 设置的,如这些图像所示(请注意,我已在图像 #3 中切换了“目标路径”和“路径”,但它没有帮助: 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我的“套件”设置如下:

在此处输入图像描述

在 Qt Creator 的“调试器日志”中,我输入了“命令”:

我得到了回应:

我还确保库和应用程序都是使用以下内容构建的:

在库和应用程序的“编译输出”窗格中,我看到了“-g”标志。

它们都驻留在文件系统上的同一目录中,所以发生了什么!为什么我可以在应用程序中调试和设置断点,但不能进入库调用?任何想法都非常感谢。

更新:

根据 kikeenrique 的建议,我尝试从我的 Ubuntu 主机(而不是 ARM 目标)加载调试符号:

似乎 GDB 至少可以加载符号..

0 投票
3 回答
4989 浏览

arm - gdserver 交叉编译失败 => 错误:找不到 termcap 库

我在尝试为 arm 交叉编译 gdbserver 时遇到了令人沮丧的错误。我已经用这个命令下载并交叉编译了 termcap

由于没有提示任何错误,因此交叉编译成功,我得到了 libtermcap.a,它是 arm,如下所示,位于 ~/termcap/

但是,如果我尝试为 arm 交叉编译 gdbserver 做同样的事情,使用相同的选项并调用交叉编译的库

我明白了

我在互联网上找到了几个建议安装库 libncurses5-dev 的站点,但我已经安装了!

所以,我不知道我能做些什么来交叉编译gdbserver,请帮忙!

提前致谢!!

问候

0 投票
1 回答
3767 浏览

gdb - 使用 Eclipse CDT 进行远程调试 - 调试动态加载的应用程序

我正在尝试在 Windows 7 上的 Eclipse Juno 的 CDT 环境中进行远程调试,而远程机器在 Linux 下运行。对于一般用途而言,不幸的是,确切的设置要复杂得多,因此我已经为这个问题苦苦挣扎了一个多星期,搜索结果中提供的解决方案都不够用。

所以,这是我的确切设置(很抱歉这么长的文字!):

  • 我有一个 C++ 应用程序 Y,我在机器 A 上开发和构建它。
  • 我将 .so 文件(调试版本)移动到在 Linux 下运行的机器 B。我那里没有可用的源代码。
  • 我没有在机器 B 上显式地启动我的应用程序 Y。首先启动了另一个应用程序 Z,然后我触发了一个特定的功能,以便动态加载我的应用程序 Y。实际上它是从数据库存储过程中完成的,但我会省略这些细节以避免让你完全困惑......
  • 我的本地机器 C 在我想从中调试的 Windows 下运行。我在那里有 Y 的源代码和可执行文件的副本,但不是来自应用程序 Z。
  • 我无法更改这些设置。

现在,我在机器 B 上安装了 gdbserver (GNU gdbserver (GDB) SUSE (7.2-3.3)),在机器 C 上安装了 gdb - 使用常见教程中的匹配目标和主机对其进行编译,版本输出如下:

我安装了用于运行和调试远程应用程序的 Eclipse 插件。我已经按照http://wiki.eclipse.org/CDT/User/FAQ#How_do_I_debug_a_remote_application.3F中的建议设置了所有内容。 当我现在开始调试会话时,gdbserver 和应用程序 Z 从 Eclipse 中的机器 B 上成功启动。我还可以通过调用存储过程来触发我的应用程序 Y。但是这里会出现以下问题和疑问:

  • 启动调试器时,它说:

    我已经阅读了一些关于在某处包含共享库的内容,但我并不完全理解这里的共享库是什么意思。也许这个问题也与下一点有关。

  • 我不知道在哪里包含我的源代码,以便在调试会话期间它可用于设置断点等。因为我没有 Eclipse 项目,所以我知道我只需要在某处包含它的路径。我将代码的根文件夹添加到调试配置的源查找路径中,但这似乎不起作用。
  • 在 Eclipse 的调试配置中,我输入要启动的 C++ 应用程序的路径。对于远程机器上的命令,我需要输入应用程序 Z,因为我无法显式启动我的应用程序 Y。因此,我在本地 C++ 应用程序的字段中输入了我的应用程序 Y 的路径。那是对的吗?
  • 当启动调试会话并从外部触发我的应用程序 Y 时,调试器中没有任何反应。我的应用程序 Y 正在运行并提供结果,但我在调试器的控制台中没有得到任何东西。我想设置断点,但是由于找不到我的源代码,我不知道如何...

我尝试直接在远程机器上进行 gdb 调试(启动应用程序 Z,从外部触发应用程序 Y)并尝试在我的应用程序 Y 的特定功能处设置断点。但这也不起作用。不过,我没有收到上面提到的警告。

所以现在我被困在这里,不知道该怎么办。我已经阅读了很多主题和博客,但没有一个像我这样有特定的设置,所以总是缺少一些细节。

我真的,真的,真的很感谢你的帮助。

0 投票
0 回答
169 浏览

gdb - GDB 上的堆栈跟踪问题

我在远程配置中使用 GDB。所以我有 gdbserver 在运行 linux 的 ARM 硬件上运行,我从本地 gdb 连接到远程 gdbserver,我能够在代码的初始部分放置断点并确保 GDB 基本上可以工作。但是,当我让我的 SW 运行一段时间并中断以查看线程时,我没有得到有用的线程堆栈跟踪。所有堆栈帧都是十六进制地址,没有解析为我的二进制文件中存在的符号。它们中的大多数看起来也与 gdb 相同,也暗示“相同的堆栈帧,损坏的堆栈??”

由于无论有没有调试器,SW 都能正常运行,我不怀疑我的 SW。任何人都看到了这个问题,或者知道这里可能发生了什么。

谢谢

0 投票
3 回答
3671 浏览

android-ndk - 使用 r9 进行 NDK 调试适用于 W7/64,但在 XP 中出现问题

我最近加载了新的 Android 开发工具 SDK 20130717 和 NDK r9。

到目前为止,我在我的两个系统(XP 和 W7/64)上都可以在 Eclipse 中工作和调试以前的版本。

现在,带有新工具的 W7/64 在新工具安装和所需路径环境更改后可以正常工作并调试我的应用程序。

当我选择“Debug As”+“Android Native Application”时它工作正常。

然而,XP,虽然它们在文件夹/cygwin 等方面具有确切的配置,但在安装新工具并更改必要的路径 env 之后,它看起来无法启动 ndk-dbg 并且它; 最终陷入等待在“启动 MyApp(1): (100%)”。这发生在我选择“Debug As”+“Android Native Application”之后。

关于可能是什么原因的任何提示?还是我错过了关于 XP 和 r9 调试的任何已知问题?

谢谢,克里斯托斯

*编辑

尝试手动启动ndk-gdb,这就是我得到的,欢迎任何提示

块引用

$ ndk-gdb --start --verbose --force

Android NDK安装路径:/cygdrive/e/android-ndk-r9

使用默认 adb 命令:/cygdrive/e/adt-bundle-windows-x86-20130717/sdk/platform-tools/adb

找到 ADB 版本:Android Debug Bridge 版本 1.0.31

使用亚行标志:

使用 JDB 命令:/cygdrive/e/Android/Java/jdk1.7.0_21/bin/jdb

使用自动检测的项目路径:.

找到的包名:myndkpackage

应用程序针对的 ABI:armeabi-v7a

设备 API 级别:17

设备 CPU ABI:armeabi-v7a armeabi

兼容设备 ABI:armeabi-v7a

使用 gdb 设置初始化:./libs/armeabi-v7a/gdb.setup

使用工具链前缀:/cygdrive/e/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-

使用应用程序输出目录:./obj/local/armeabi-v7a

找到可调试标志:true

找到设备 gdbserver:/data/data/myndkpackage/lib/gdbserver

找到数据目录:'/data/data/myndkpackage'

找到第一个可启动的活动:myndkpackage.MainActivity

启动活动:myndkpackage/myndkpackage.MainActivity

命令: adb_cmd shell am start -D -n myndkpackage/myndkpackage.MainActivity

开始:意图 { cmp=myndkpackage/.MainActivity }

命令:adb_cmd 外壳睡眠 2

发现运行PID:2787

杀死现有的调试会话

命令: adb_cmd 外壳杀死 -9 2753

成功启动 gdbserver。

设置网络重定向

命令:adb_cmd shell run-as myndkpackage lib/gdbserver +debug-socket --attach 2787

命令:adb_cmd forward tcp:5039 localfilesystem:/data/data/myndkpackage/debug-socket

随附的; PID = 2787

监听 Unix 套接字调试套接字

命令: adb_cmd pull /system/bin/app_process obj/local/armeabi-v7a/app_process

599 KB/s(0.015 秒内 9588 个字节)

从设备/模拟器中提取 app_process。

命令: adb_cmd pull /system/bin/linker obj/local/armeabi-v7a/linker

658 KB/s(0.093s 内 63244 字节)

从设备/模拟器中提取链接器。

命令: adb_cmd pull /system/lib/libc.so obj/local/armeabi-v7a/libc.so

744 KB/s(0.390 秒内 297608 字节)

从设备/模拟器中提取 libc.so。

设置 JDB 连接

命令:adb_cmd 转发 tcp:65534 jdwp:2787

java.io.IOException:握手失败 - 连接提前关闭

在 com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:136)

在 com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232)

在 com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116)

在 com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90)

在 com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)

在 com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)

在 com.sun.tools.example.debug.tty.Env.init(Env.java:63)

在 com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066)

致命错误:

无法附加到目标 VM。

/cygdrive/e/android-ndk-r9/ndk-gdb:第 742 行:4636 分段错误 $GDBCLIENT -xnative_path $GDBSETUP

块引用

0 投票
1 回答
1463 浏览

cuda - 如何在 Linux 上使用 Nsight 5.5 进行远程调试?

免责声明:我知道这个问题已经被问过很多次了,但在 Nsight 5.5 之前,答案只是“你不能”。

我正在尝试在 Ubuntu 上使用 Nsight 5.5 调试 CUDA 程序。远程机器也是带有 CUDA Toolkit 5.5 的 Ubuntu。

我使用“调试远程系统上的应用程序”在 NSight 中设置调试。每当我尝试运行应用程序时,我都会收到“无法在远程主机上启动 gdbserver”错误。

这是我在控制台上得到的:

两者gdbservercuda-gdbserver安装在两台机器上。

如果我 ssh 到远程主机,我可以/tmp/nsight-debug/flow手动运行。

这里可能有什么问题?设置中是否缺少任何内容?

0 投票
0 回答
674 浏览

linux - 无法为 MIPS n32 交叉编译 GDBServer

我在为 MIPS n32 交叉编译 GDBServer 时遇到问题。我正在使用 GCC-4.7.2、binutils-2.22、glibc-2.11.1、glibc-ports-2.11 和 linux-2.6.32.61。我的主机是 x86_64-cross-linux-gnu。我的目标是 mips64-elf-linux。MIPS 的特定 ABI 是n32

当我去制作 GDBserver 时,在编译 regcache.c 时出现错误。regcache.c 在 gdb/gdbserver/ 中。gcc 正在尝试编译一个名为“reg”的结构。我已经包含了所有的 mips 包含文件。不过,我可以为 x86 编译 GDBServer。我对 /usr/include/ 中的所有包含文件进行了 grep 以尝试查找“struct reg”,但没有成功找到任何内容。我找到了这篇文章并更改了名称,希望它能解决问题,但这不起作用,因为 regcache.c 中的 reg 结构具有偏移和值等属性。我也尝试过在 ptrace.h 中弄乱 pt_regs。但是我不认为我应该弄乱 GDBServer 附带的文件。

我的配置命令是:

有谁知道为什么我不能为 Mips n32 编译 GDBServer?

谢谢,

更新: