标签: gdbserver

如何使用valgrind启动Android应用程序

我一直在寻找上周试图找到这个问题的答案.

如何使用valgrind启动Android应用程序?我知道我可以使用'am'命令启动应用程序,但它会启动应用程序并退出.

我正在编写一个将NDK用于本机C代码的应用程序,我需要检查它是否存在可疑的内存错误.

编辑:

我学到了更多.您可以使用shell脚本"包装"应用程序.

这是我正在使用的shell脚本:

#!/system/bin/sh
VGPARAMS='--error-limit=no'
export TMPDIR=/data/data/com.starlon.froyvisuals
exec /data/local/Inst/bin/valgrind $VGPARAMS $*
Run Code Online (Sandbox Code Playgroud)

这是setprop:

adb shell setprop wrap.com.starlon.froyvisuals "logwrapper valgrind"
Run Code Online (Sandbox Code Playgroud)

以下是我启动应用的方式:

adb shell am start -n com.starlon.froyvisuals/.FroyVisuals
Run Code Online (Sandbox Code Playgroud)

我不认为这是对的,因为我不确定shell脚本适合哪里,我在logcat中没有看到任何东西.任何提示?

Edit2:哦shell脚本用上面的"setprop"命令表示.所以

adb shell setprop wrap.com.starlon.froyvisuals "logwrapper /data/local/val.sh"
Run Code Online (Sandbox Code Playgroud)

我还没有在logcat中看到任何东西.

android valgrind android-ndk gdbserver

24
推荐指数
1
解决办法
2万
查看次数

android ndk gdb加载的sharedlibraries缺少*.oat

调试我的设备时,gdb 7.7和7.11都错过了一些共享库(oppo r7s).我把所有图书馆都搬到了当地.这是一个完整的库列表info shared

(gdb) info shared
From        To          Syms Read   Shared Object Library
0x40000980  0x40009640  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\linker
0x401c7940  0x401ce6e8  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libutils.so
                        No          libstdc++.so
                        No          libm.so
0x4013bbb0  0x4017329c  Yes (*)     Z:\program\program\target\android_RelWithDebInfo\obj\local\armeabi-v7a\libc.so
                        No          libbinder.so
                        No          liblog.so
                        No          libhardware.so
                        No          libcutils.so
                        No          libc++.so
                        No          libLLVM.so
                        No          libbcinfo.so
                        No          libunwind.so
                        No          libz.so
                        No          libpng.so
                        No          libpowermanager.so
                        No          libcommon_time_client.so
                        No          libstlport.so
                        No          libui.so
                        No          libsync.so
                        No          libgui.so
                        No          libft2.so
                        No          libbcc.so
                        No          libGLESv2.so
                        No          libGLESv1_CM.so
                        No          libEGL.so
                        No          libunwind-ptrace.so …
Run Code Online (Sandbox Code Playgroud)

android gdb android-ndk gdbserver

19
推荐指数
1
解决办法
371
查看次数

如何终止gdbserver?

我正在尝试使用gdbserver进行调试.在我终止主机上的gdb客户端后,我看到gdbserver仍在监听:

Remote side has terminated connection.  GDBserver will reopen the connection.
Listening on port 5004
Run Code Online (Sandbox Code Playgroud)

我试图退出gdbserver,我发现任何地方都没有运气:退出,退出,q,监视器退出,Esc,Cnt + c ...没有什么可以杀死它.此外,当我打开另一个终端并查找运行gdbserver的进程(使用命令ps,top)时,我找不到它...我的问题是 - 如何终止gdbserver?

linux gdb gdbserver

18
推荐指数
2
解决办法
2万
查看次数

使用gdb和gdbserver从Windows远程调试Linux进程:Windows端究竟需要什么?

我在Windows上运行Eclipse CDT来开发在远程Linux系统上构建和测试的C代码.目前,代码永远不会在Windows上编译.

我能够使用CDT在gdbserver下的Linux目标上开始远程进程,然后从Windows主机上附加gdb.但是,gdb会立即失败并出现以下错误:

warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB.  Attempting to continue with the default i386 settings.
[...]
Remote 'g' packet reply is too long: 74afe9bff0aee9bf02000000f4af4a00a0aee9bf[...]
Run Code Online (Sandbox Code Playgroud)

两个Linux系统之间的调试工作正常,所以很明显我在Windows主机端做错了.我的具体问题是:

  • Cygwin的gdb版本是否足以调试远程Linux进程,或者我是否需要一个特殊的交叉gdb才能在Windows上运行它使用Linux进程?如果是这样,我可以在任何地方获得这样的gdb吗?

  • 使用gdb进行远程调试需要在主机系统上提供符号.实现这一目标的最简单方法是什么?我可以将Linux目标上的构建产生的符号复制到Windows主机,还是必须在Windows上进行完整构建?有没有办法避免这个要求,这样我才能在目标上提供符号?

谢谢,

-R


更多信息:RSE常见问题提供了一些三分球,但不幸的是,我仍然受阻.FAQ描述了两种方法:

  • 通过ssh在远程系统上启动gdb客户端.这里的问题是CDT调试启动器中的某些字段与本地系统(项目路径,可执行路径等)相关联.
  • 构建/获取支持从Windows调试Linux进程的gdb的交叉调试版本.这里的问题是关于如何实现这一目标的信息很少.

我也在CDT论坛上提出了这个问题.

linux windows gdb eclipse-cdt gdbserver

16
推荐指数
4
解决办法
1万
查看次数

gdb远程交叉调试失败,"远程'g'数据包回复太长"

我有远程调试的问题.

主机:笔记本电脑intel i5与ubuntu 10.10 x86目标:飞思卡尔iMX35(iMX35 PDK)第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 …

debugging gdb qt4 qt-creator gdbserver

16
推荐指数
3
解决办法
2万
查看次数

Eclipse无法执行MI命令-target-select remote

试图在eclipse中设置远程gdb调试.当我尝试调试我得到:

 Error in final launch sequence
 Failed to execute MI command: -target-select remote LOCALHOST:2345
 Error message from debugger back end:
  LOCALHOST:2345: Connection timed out.
  LOCALHOST:2345: Connection timed out.
Run Code Online (Sandbox Code Playgroud)

我的gdb调试器设置正确

 /carambola/carambola/build_dir/toolchain-mipsel_r2_gcc-4.6-linaro_uClibc-0.9.33.2/gdb-linaro-7.2-2011.03-0/gdb/gdb
Run Code Online (Sandbox Code Playgroud)

(执行此操作我可以获得gdb shell)

知道我做错了什么吗?我觉得这很简单?

c++ eclipse gdb gdbserver

10
推荐指数
1
解决办法
4万
查看次数

使用gdb/gdbserver逐步调用库调用

我有一个通用的gdb/gdbserver问题.我正在尝试使用主机上的gdb和远程目标上的gdbserver调试arm linux嵌入式应用程序.我可以在main的开头逐步执行代码行.但是,在调用共享库函数之后,gdb(或gdbserver)似乎会丢失.即使我在调用后设置断点并使用continue,它也永远不会遇到断点.我知道我在共享库中没有符号,并且实际上并不关心它们.即使没有符号在共享库中或至少继续到下一个断点,我是否应该能够成功跳过gdb中的库调用?或者这是否表明存在不同类型的问题?

linux gdb arm gdbserver

9
推荐指数
1
解决办法
626
查看次数

使用r9进行NDK调试可以在W7/64上运行但是在XP中给我带来了问题

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

到目前为止,我已经拥有了以前的版本,在我的两个系统中都可以正常运行和调试Eclipse,XP和W7/64.

现在,在新工具安装和所需路径环境发生变化后,带有新工具的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

使用ADB标志:

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

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

找到包名:myndkpackage

申请目标ABIs:armeabi-v7a

设备API级别:17

设备CPU ABIs:armeabi-v7a armeabi

兼容设备ABI:armeabi-v7a

使用gdb setup init:./ libs/armeabi-v7a/gdb.setup

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

使用app out目录:./ obj/local/armeabi-v7a

找到debuggable标志: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 shell sleep 2

发现运行PID:2787

杀死现有的调试会话

命令:adb_cmd shell kill -9 2753

成功启动了gdbserver. …

android-ndk gdbserver ndk-gdb

9
推荐指数
1
解决办法
3636
查看次数

Qt 5.x嵌入式调试 - 部署剥离的二进制文件?

我相信(如果我错了,请纠正我),当使用gdb和进行远程调试时gdbserver,在目标下运行的二进制文件gdbserver不需要二进制文件中的调试信息,但运行的主机gdb确实如此.

我们带有调试符号的应用程序二进制文件大约是112兆(!).如果我运行strip,那么二进制文件只有6.7 megs,这可以更快地部署到我们的目标.

是否有可能让Qt Creator在部署之前剥离二进制文件?我们还能调试吗?

c++ debugging qt gdbserver

9
推荐指数
1
解决办法
1504
查看次数

如何使用GDB查找Android目标处理器的基地址

我目前正在玩GDB,想要调试Android中的本机处理器,特别是/ system/bin/lmkd.

但是,一旦调用该处理器,我就无法停止GDB.

这是我到目前为止所尝试的:

Android的一面:

./gdbserver tcp:5039 /system/bin/lmkd
Run Code Online (Sandbox Code Playgroud)

客户端:

gdb

target remote localhost:5039
Run Code Online (Sandbox Code Playgroud)

从这里,我输入info shared,所以我可以得到本机处理器的基地址,设置断点,继续,调用处理器,然后它会停止.

info shared只显示共享对象文件的地址.

关于如何在处理器上设置我不知道地址的断点的任何建议?

gdb gdbserver

9
推荐指数
1
解决办法
174
查看次数