问题标签 [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.
android - 如何使用 GDBSERVER 在 Android 上调试应用程序?
我正在尝试调试我的应用程序通过 JNI 使用的本机共享库。我可以使用“gdbserver --attach pid”附加到正在运行的应用程序,但我需要在启动 gdbserver 命令时实际启动我的应用程序。
关于这个主题有 100 万次博客点击,但似乎没有一个人清楚地说明您如何启动您的应用程序。他们都说只输入“gdbserver 10.0.2.2:1234 ./MyProgram”,但究竟什么是“MyProgram”。那是 MyProgram.apk 吗?是 MyProgram.so 吗?它是在安装应用程序时创建的其他文件吗?如果有,它的路径是什么?
linux - 是否可以从非 linux 系统远程调试 linux 代码?
我知道可以使用 gdb 的服务器模式远程调试代码,并且我知道可以调试已针对另一种架构交叉编译的代码,但是是否可以更进一步并使用 OS X 远程调试 Linux 应用程序数据库服务器?
android - 使用 Eclipse 在 android 上使用 gdb 调试本机代码 (C++)。可能吗?
我有一些使用 JNI 的代码。我可以直接在 Eclipse 中调试用 Java 编写的代码(使用 ADT)。我什至有一个脚本,它可以帮助我使用 gdb 调试本机代码。然而,这样做并不是很舒服。
是否可以将 Eclipse 配置为使用 gdb(我猜是 gdbserver)来调试 android 本机应用程序?你知道我在哪里可以找到这方面的任何描述吗?
gdb - 在带有 Centos 5 的 64 位机器上使用带有 32 位二进制文件的 gdb 和 gdbserver 抱怨内存访问或数据格式错误
我有两台相同的 64 位 Centos 5 机器,它们是联网的,并且共享它们的 /home 挂载。我在一台机器上编译了一个简单的 Hello World 程序,然后我想出了如何在一台机器上使用 gdb 来远程调试另一台机器上运行的它。当每个人都默认为 64 位时,这似乎工作正常。
但是,如果我用 -m32 编译我的 Hello World 以生成 32 位二进制文件,即编译我们完整系统的方式,那么我无法弄清楚如何让 gdb 和 gdbserver 正确连接。在我在我们的完整系统上尝试之前,我想我应该让它与 hello 一起工作。根据我尝试连接 gdb 和 gdbserver 的方式,我会收到有关格式错误的寄存器的消息、有关架构不匹配的警告或非法内存引用。
我似乎对 -m32 在我的编译中的含义知之甚少,也不知道如何启动 gdb 和 gdbserver 或指定体系结构或文件或其他内容的正确顺序。:(
在 64 位 Linux 机器上的 32 位 (-m32) 可执行文件上使用 gdb 和 gdbserver 需要什么?
下面的例子,谢谢,
杰瑞
你好.cpp:
以下是三个运行:
- 在 gdb 中,设置架构 i386 / 然后连接到 gdbserver => 糟糕的架构
- 在gdb中,设置架构i386 /文件hello /然后连接到gdbserver => bad architecture
- 在 gdb 中,设置架构(错误)i386:x86-64 / file hello / 然后连接到 gdbserver => 无法访问内存
或者更详细一点:
===============================
对于每次运行,远程 gdbserver 都会说:
在我们的本地:
===============================
- 假设是i386 32位,将archi设置为i386,然后连接注意:在gdb端,尚未指定或加载可执行文件
===============================
- 假设是i386 32位,将archi设置为i386,然后连接注意:在gdb端,可执行文件已经加载了文件
===============================
- 假设(这应该是不正确的)它是 i386:x86-64,将 archi 设置为 i386:x86-64,然后连接注意:在 gdb 端,可执行文件已加载文件
gdb - 使用 Eclipse 远程调试 gdbserver
有谁知道为什么我不能使用 Eclipse CDT 来远程调试设备,当我使用目标远程命令在命令行上使用 gdb 管理设备时?连接时确实收到警告,但除此之外它似乎工作正常。
使用 Eclipse,我应该有正确的设置,并且 gdbserver 在远程机器上通知我连接已建立,但之后 Eclipse 给出错误:“启动调试”遇到问题。请求失败:目标没有响应(超时)。远程设备还说“杀死劣等”(我没有使用 gdb)。错误日志也没有显示任何其他内容。
我在两种情况下都使用相同的进程、二进制和 gdb 可执行文件并连接到相同的设备和端口。我正在使用 gdb 7.1,主机是 64 位 Ubuntu Lucid。
windows - 使用 gdb 和 gdbserver 从 Windows 远程调试 Linux 进程:Windows 端究竟需要什么?
我在 Windows 上运行 Eclipse CDT 来开发在远程 Linux 系统上构建和测试的 C 代码。目前,代码从未在 Windows 上编译。
我可以使用 CDT 在 gdbserver 下的 Linux 目标上启动远程进程,然后从 Windows 主机附加 gdb。但是,gdb 立即失败,并出现以下错误:
两个 Linux 系统之间的调试工作正常,所以很明显我在 Windows 主机端做错了什么。我的具体问题是:
Cygwin 版本的 gdb 是否足以调试远程 Linux 进程,还是我需要一个特殊的跨 gdb 才能在 Windows 上运行它并使用 Linux 进程?如果是这样,我可以在任何地方获得这样的 gdb 吗?
使用 gdb 进行远程调试要求主机系统上有可用的符号。实现这一目标的最简单方法是什么?我可以将 Linux 目标上构建生成的符号复制到 Windows 主机,还是必须在 Windows 上进行完整构建?有没有办法避免这个要求,这样我只能在目标上提供符号?
谢谢,
-R
更多信息: RSE常见问题解答提供了一些指示,但不幸的是我仍然被阻止。常见问题解答描述了两种方法:
- 通过 ssh 在远程系统上启动 gdb 客户端。这里的问题是 CDT 调试启动器中的某些字段与本地系统相关联(项目路径、可执行路径等)。
- 构建/获取支持从 Windows 调试 Linux 进程的 gdb 的交叉调试版本。这里的问题是关于如何实现这一点的信息很少。
我也在CDT 论坛上提出了这个问题。
linux - gdbserver 错误
有人知道错误信息吗?gdbserver [949] 81c ip 0000081c sp bfeef918 错误 4 在 gdbserver [8048000+1c0000] 分段错误
谢谢,
c++ - gdbserver 跟随孩子
我正在尝试调试远程主机上的分叉进程,但每次子退出时都会让 gdbserver 进程在我身上结束。
试图在 .gdbinit 中设置“set follow-fork-mode child”,但没有帮助。
这个有什么好的解决方案吗?
谢谢。
debugging - gdb 远程交叉调试因“远程 'g' 数据包回复太长”而失败
我有远程调试的问题。
主机:带有 ubuntu 10.10 x86 的笔记本电脑 intel i5 目标:Freescale iMX35 (iMX35 PDK) arm 11 开发环境:Qt Creator 2.1RC 和 Qt4.7.1 库。路径中的 Arm 编译器:/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin
arm-none-linux-gnueabi-gcc-4.1.2 arm-none-linux-gnueabi-objdump arm-none-linux-gnueabi-addr2line arm-none-linux-gnueabi-gccbug
arm-none-linux-gnueabi-ranlib arm -none-linux-gnueabi-ar
arm-none-linux-gnueabi-gcov arm-none-linux-gnueabi-readelf arm-none-linux-gnueabi-as
arm-none-linux-gnueabi-run arm-none-linux- gnueabi-c++
arm-none-linux-gnueabi-size arm-none-linux-gnueabi-c++filt
arm-none-linux-gnueabi-gprof arm-none-linux-gnueabi-strings arm-none-linux-gnueabi- cpp arm-none-linux-gnueabi-ld
arm-none-linux-gnueabi-strip arm-none-linux-gnueabi-g++
arm-none-linux-gnueabi-nm arm-none-linux-gnueabi-gcc
arm- none- linux-gnueabi-objcopy
目标是调试使用 Qt 创建的项目。所以我简单地创建了一个 Qt Quick Project -> Qt Quick Application,它创建了一个简单的 Hello World 应用程序 (C++/Qml) 我交叉编译它(在调试或发布中),它在目标上运行良好。所以我很确定交叉编译与我将向您展示的问题无关。
我下载了 gdb 7.2 并执行了以下操作:
$ export PATH=/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin:$PATH
$ cd /home/elux/iMX35/gdb- 7.2/
$ ./configure --target=arm-none-linux-gnueabi --build=i686
$ make
$ sudo make install$ export CC=arm-none-linux-gnueabi-gcc
$ export LD=arm-none-linux-gnueabi-ld
$ cd gdb/gdbserver/
$ ./configure --build=i386 --host=arm-none-linux -gnueabi --target=arm-none-linux- gnueabi
$ make$ sudo cp gdbserver /home/elux/MX35/ltib/rootfs/usr/bin/ (将 gdbserver 复制到目标)
然后在目标上:
$ gdbserver 10.10.10.1:4000 测试
过程测试创建;pid = 2194
监听端口 4000
在目标上:
$ arm-none-linux-gnueabi-gdb 测试(测试是在调试模式下交叉编译它 Qt Creator) GNU gdb (GDB) 7.2
版权所有 (C) 2010 Free Software Foundation, Inc.
许可证 GPLv3+:GNU GPL 版本 3 或更高版本http://gnu.org/licenses/gpl.html
这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,不提供任何保证。键入“显示复制”
和“显示保修”以了解详细信息。
此 GDB 配置为“--host=i686 --target=arm-none-linux-gnueabi”。
有关错误报告说明,请参阅:
http ://www.gnu.org/software/gdb/bugs/ ...
从 /home/elux/iMX35/ltib/rpm/BUILD/qt-everywhere-opensource-src-4.7.1 /platform/Test-build-arm/Test...读取符号...完成。
(gdb) target remote 10.10.10.2:4000
远程调试使用 10.10.10.2:4000
警告:无法解析 XML 目标描述;XML 支持在编译时被禁用
警告:无法找到动态链接器断点函数。
GDB 将无法调试共享库初始化程序
和跟踪显式加载的动态代码。
0x400007e0 在?? ()
(gdb)
和
(gdb) set solib-absolute-prefix /home/elux/iMX35/ltib/rootfs/
从 /home/elux/iMX35/ltib/rootfs/lib/ld-linux.so.3 读取符号...完成。
为 /home/elux/iMX35/ltib/rootfs/lib/ld-linux.so.3 加载符号
但
(gdb) set architecture armv5te
The target architecture is assumed to be armv5te
Remote 'g' packet reply is too long: 00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000(gdb) b main
Remote 'g' packet reply is too long: 00000000a7ee8ebe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0ed8ebe00000000e007004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
你知道这个问题与什么有关吗?我该如何解决?
c - gdb 远程调试 - 进入共享库时程序崩溃
我在 cygwin 主机上交叉编译了一个针对 linux 的应用程序。该程序在目标和 gdbserver 上运行正常。但是,当我尝试单步执行程序时,只要我单步执行共享库函数,它就会崩溃。回溯 gdb 打印的是:
(gdb) bt
#0 0x00000000004008f4 in ?? ()
#1 0x0000003f0380d7e4 in ?? ()
#2 0x00002b1373630000 in ?? ()
#3 0x00002b1373630590 in ?? ()
#4 0x00002b1373631348 in ?? ()
#5 0x00002b1373631888 in ?? ()
#6 0x0000003f03a1c510 in ?? ()
#7 0x0000000000000000 in ?? ()
如果我在函数上设置断点并继续它不会崩溃。
这是你好.c:
使用x86_64-unknown-linux-gnu-gcc -g -c hello.c 编译。
和 foo.c:
使用x86_64-unknown-linux-gnu-gcc -g -shared -Wl,-soname,libfoo.so -o libfoo.so foo.c 编译。
链接是x86_64-unknown-linux-gnu-gcc -Wl,-rpath,。libfoo.so hello.o -o hello。