androidgdbserver
A. android gdbserver 有什么用
使用 SQL Server 代理服务连接到 SQL Server SQL Server 代理服务可以使用 Windows 身份验证或 SQL Server 身份验证连接到 SQL Server 本地实例。无论您选择哪种身份验证,帐户都必须是 sysadmin 固定服务器角色的成员。 可用身份验证方法 SQL Server 代理可以使用两种不同的身份验证方法连接到 SQL Server 实例: Windows 身份验证,使用这种方法时,SQL Server 代理服务使用定义为服务启动帐户的 Microsoft Windows 域帐户连接到 SQL Server 实例。 SQL Server 身份验证,使用这种方法时,SQL Server 代理服务使用 SQL Server 身份验证登录名连接到 SQL Server 实例。只有 sysadmin 角色的成员可以这样登录。 安全说明: 在 SQL Server 2005 中,SQL Server 代理不支持 SQL Server 身份验证。仅在管理早期版本的 SQL Server 时可以使用这种身份验证。
B. gdbserver output: run-as: Package '' is unknown
/system/bin/run-as的权限不对
首先把手机ROOT 连接电脑 打开USB调试
然后 打开电脑的控制台
> adb shell
> su
> mount -o remount rw /system
> chmod 4750 /system/bin/run-as
> mount -o remount ro /system
之后就能断点了
C. apk调试方法求助
方法一:
1、使用apktool的-d选项反编译apk文件
java -jar apktool.jar d -d target.apk -o output
2、在AndroidManifest的application节点中添加 android:debuggable="true"
3、在入口点的类的onCreate中添加如下代码等待调试
invoke-static{}, Landroid/os/Debug;->waitForDebugger()V
4、回编译apk
java -jar apktool.jar b -d output -o newTarget.apk
5、对apk进行签名
java -jar signapk.jar testkey.x509.pem testkey.pk8 newTarget.apk signed.apk
6、将签名后的apk安装到手机或者模拟器上
adb install signed.apk
7、将1中的smali代码导入到Android Studio中
file→open→output目录→下断点
8、打开Monitor查找相应的进程
运行→monitor 或者Tools ->Android ->Android Device Monitor
9、配置远程调试选项
Run→Editor Configurations→Defaults→Remote,点击+号新增一个,Host为localhost,Port为8700
10、打开apk,点击绿色的小虫子就可以开始调试了
方法二:无需修改原apk文件
1、用 Android killer等工具反编译apk文件
2、将smali代码入到Android Studio中,安装smaliidea插件
File→Settings→Plugins→Install plugin from disk…→Restart
3、配置远程调试选项,打开monitor
4、使用adb以debug方式启动apk
adb shell am start -D -n package/activitiyname
5、下断点开始调试,在watch中添加寄存器http://www.315nk.com/不清楚追问,希望能帮助到您
D. 在Android设备上怎么调试守护进程
其实网上有很多类似的文章,但是你会发现几乎都不可重现,要么是细节没讲清楚,要么是压根自己没有真正去试过。这里,我仅给出自己用gdb和gdbserver调试android native code的实际过程,希望对大家有用。
注:以调试mediaserver进程为例.
第一步:你需要下载android,以debug方式编译,并以生成的image起模拟器或者设备。
第二步:你需要从“http://developer.download.nvidia.com/tegra/files/tegra-gdb-20100430.zip”下载一个gdb,覆盖到android源码中gdb对应的位置。
第三步:adb shell到设备,并起gdbserver侦听目标进程:
adb shell
gdbserver :5039 /system/bin/mediaserver
第四步: 建立pc机和设备的消息连接:
adb forward tcp:5039 tcp:5039
第五步: 使用gdb调试目标进程:
cd android_src
prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gdb out/debug/target/proct/generic/symbols/system/bin/mediaserver
第六步: 设置符号表:
set solib-absolute-prefix /your_android_src_path/out/debug/target/proct/generic/symbols
set solib-search-path /your_android_src_path/out/debug/target/proct/generic/symbols/system/lib
第七步: 使gdb和gdb server建立连接:
target remote :5039
第八步: ok. 现在可以使用gdb的命令进行调试,譬如next\break\step\info thread等.
E. 请教gdbserver使用方法
方法是没有问题的。不过你刚gdbserver以attach方式启动调试的时候,你的程序应该是停在sleep()的库函数里面,
这个时候走单步一般会报“Cannot find bounds of current function”。
你启动gdb之后把set debug remote 1 打开,然后把gdb侧和gdbserver侧的调试打印都贴上来看一下。
F. gdb加载动态库成功,但是不能显示动态库中的源码(gdb+gdbserver)
因为具体的给的不够详细,不清楚你遇到的情况。
如果仅从断点上看,应该就是CApartment.cpp:55
但是,如果你的程序编译的时候,不是-O0,那个可能回不到源码,只能看汇编。
1、有时候(很少)就是编译器的错误。
2、还有可能就是你调试的程序和你的源码不匹配
3、你的程序已经崩溃了,破坏了堆栈或者GDB需要的数据。
4、这个地方有特殊的定位信息
5、其他情况,还是比较多的,经常遇到。
如果懂汇编,最好看看汇编。
如果不懂,看看那一条语句是最后一条能够跟踪的语句。
仔细看看最后一条语句的所有变量,应该能猜出来是什么问题。
G. android ndk build BUILD_EXECUTABLE的问题
dr@drBox:~/workspace/JniTest/jni$ ~/android-ndk-r6/ndk-build Compile++ thumb : Test <= JniTest.cpp /bin/sh: /home/dr/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++: not found make: *** [/home/dr/workspace/JniTest/obj/local/armeabi/objs/Test/JniTest.o] Error 127
这个错误是说找不到arm-linux-androideabi-g++,确实找不到,我从ndk r6中发现根本就没有linux-x86/文件夹,只有darwin-x86 gdbserver这两个文件夹,所以了最新的ndk r7b,幸好这里面有linux-x86文件夹,编译成功了。
dr@drBox:~/workspace/JniTest/jni$ ~/android-ndk-r7b/ndk-build Compile++ thumb : Test <= JniTest.cpp StaticLibrary : libstdc++.a SharedLibrary : libTest.so Install : libTest.so => libs/armeabi/libTest.so
2.当只改动Android.mk文件后需要编译,这时mm执行后会报如下提示:
============================================ make: Entering directory `/home/dr/android4.0.3' make: Nothing to be done for `all_moles'. make: Leaving directory `/home/dr/android4.0.3'
说明没有文件改动,拒绝编译。
那么解决办法可以是去稍微改动一下cpp等文件,加个空格也行。但是还有一种方便的方式就是
给cpp文件加时间戳:touch *.cpp
这样就可以继续编译了,所有cpp文件的时间都更新为最新了。
H. eclipse下使用gdb调试时gdbserver 调试时 msg= Watchdog timeout has expired. Target detached
message from arm-linux-androideabi-gdb.exe which source code is remote.c
in function getpkt_or_notif_sane_1
if( c == SERIAL_TIMEOUT )
...
you need close the target watchdog daemond