我一直在寻找上周试图找到这个问题的答案.
如何使用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中看到任何东西.
调试我的设备时,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) 我正在尝试使用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?
我在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描述了两种方法:
我有远程调试的问题.
主机:笔记本电脑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 …
试图在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)
知道我做错了什么吗?我觉得这很简单?
我有一个通用的gdb/gdbserver问题.我正在尝试使用主机上的gdb和远程目标上的gdbserver调试arm linux嵌入式应用程序.我可以在main的开头逐步执行代码行.但是,在调用共享库函数之后,gdb(或gdbserver)似乎会丢失.即使我在调用后设置断点并使用continue,它也永远不会遇到断点.我知道我在共享库中没有符号,并且实际上并不关心它们.即使没有符号在共享库中或至少继续到下一个断点,我是否应该能够成功跳过gdb中的库调用?或者这是否表明存在不同类型的问题?
我最近加载了新的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. …
我相信(如果我错了,请纠正我),当使用gdb和进行远程调试时gdbserver,在目标下运行的二进制文件gdbserver不需要二进制文件中的调试信息,但运行的主机gdb确实如此.
我们带有调试符号的应用程序二进制文件大约是112兆(!).如果我运行strip,那么二进制文件只有6.7 megs,这可以更快地部署到我们的目标.
是否有可能让Qt Creator在部署之前剥离二进制文件?我们还能调试吗?
我目前正在玩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只显示共享对象文件的地址.
关于如何在处理器上设置我不知道地址的断点的任何建议?