怎样搭建远程adb调试环境搭建

博客访问: 378622
博文数量: 287
博客积分: 8433
博客等级: 中将
技术积分: 2151
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
典型的调试工具搭建为:
Gdb+gdbserver+insight
若不需要图形界面,则使用GDB+gdbserver即可,当然习惯了windows下的图形界面,可以用insight。下面分别介绍使用:
一.GDB +GDBServer
1)总体介绍
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果
UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来
说,GDB主要帮忙你完成下面四个方面的功能:&&&&
&1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。&&&& 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)&&&& 3、当程序被停住时,可以检查此时你的程序中所发生的事。&&&&
4、动态的改变你程序的执行环境。从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具
的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。
&远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用
GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机
调试程序间的一个媒介而存在。&&&&&&
就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM
Monitor调试目标机程序、用KGDB调试系统内核和用gdbserver调试用户空间程序。这三种调试方法的区别主要在于,目标机远程调试stub
的存在形式的不同,而其设计思路和实现方法则是大致相同的。而我们最常用的是调试应用程序。就是采用gdb+gdbserver的方式进行调
试。在很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序。采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进
行调试,通常采用gdb+gdbserver的方式进行调试。
嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target
Board端使用gdbserver。这样,应用程序在嵌入式目标系统上运行,而gdb调试在Host端,所以要采用远程调试(remote)的方法。进
行GDB调试,目标系统必须包括gdbserver程序(在主机上正对硬件平台编译成功后下载到目标机上),宿主机也
必须安装GDB
程序。一般Linux发行版中都有一个可以运行的GDB,但开发人员不能直接使用该发行版中的GDB来做远程调试,而要获取GDB的源代码包,针对arm
平台作一个简单配置,重新编译得到相应GDB。
2)安装arm-linux-gdb(宿主机) 以及 gdbserver(arm目标板)
下载gdb-6.6的源代码包 &&&&&& http://www.gnu.org/software/gdb/download/ftp://ftp.gnu.org/gnu/gdb
或者到chniaUnix 去下载
#tar jxvf gdb-6.6-tar-bz2#cd gdb-6.6
#./configure--target=arm-linux-prefix=/usr/local/arm/gdb--with-solib-absolute-prefix=/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/target
(--target配置gdb的目标平台,--prefix配置安装路径,当然其他路径也可以, --with-solib-absolute-prefix 指定这个绝对路径很重要,否则到时候调试的时候会报一堆错误和警告,例如:
xxx is not at the expected address。
Error while mapping shared library sections。
因为对远程调试来说,你需要告诉 GDB 目标库所在的地方,这样它才能载入正确的拷贝--不然,它可能试图载入宿主机的库。
以上的路径 :/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/target 就是本人的目标机的lib所在的绝对路径。如果没有加入该路径的话,请参考文章附录中的法方。)
#make#make install(生成arm-linux-gdb,并存入/usr/local/arm /gdb/bin/)
gedit /root/.bashrc& 添加:& export PATH=$PATH:/usr/local/arm/gdb/bin
(添加arm-linux-gdb到环境变量)
在终端任意路径:#arm-linux-gdb& 检查是否安装成功。
进入gdb-6.6/gdb/gdbserver目录:
#./configure --target=arm-linux --host=arm-linux(--target=arm-linux表示目标平台,--host表示主机端运行的是arm-linux-gdb)
#make CC=/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin/usr/local/arm/2.95.3/bin/arm_v5t_le-gcc(arm_v5t_le-gcc
是本人的交叉编译工具
,因为gdbsever是在目标机上运行,当然要用交叉编译器编译啦。本人这里用的是绝对路径,当然也可以用相对路径但可能会出现make:
arm_v5t_le-gcc: Command not
found,也可以直接修改gdbserver目录下的Makefile文件中的环境变量CC)
没有错误的话就在gdbserver目录下生成gdbserver可执行文件。用arm-linux-strip命令处理一下gdbserver,将多余的符号信息删除,可让elf文件更精简,通常在应用程序的最后发布时使用。
最后把gdbserver可执行文件 下载到开发板。
3)gdb+gdbserver nfs调试流程下面就可以用gdb+gdbserver调试我们开发
板上的程序了。在目标板上运行 gdbserver,其实就是在宿主机的minicom下。我是在minicom下#mount
192.168.2.100:/ /tmp后做的(这里参数-o
nolock可以不加,不加这一步执行得反而更快些),hello和gdbserver都是位于Linux根目录下,把主机根目录挂在到开发板的/tmp
目录下。要进行gdb调试,首先要在目标系统上启动gdbserver服务。在gdbserver所在目录下输入命令:(minicom下)#cd /tmp#./gdbserver 192.168.2.100:2345 hello192.168.2.100为宿主机IP,在目标系统的2345端口(你也可以设其他可用的值,当然必须跟主机的gdb一致)开启了一个调试进程,hello为要调试的程序(必须-g加入调试信息)。出现提示:Process /tmp/hello created: pid=80Listening on port 2345(另一个终端下)#cd /#arm-linux-gdb hello最后一行显示:This GDB was configured as “--host=i686-pc-linux-gnu,--target=arm-linux”...,如果不一致说明arm-linux-gdb有问题说明此gdb在X86的Host上运行,但是调试目标是ARM代码。(gdb) target remote 192.168.2.223:2345(192.168.2.223为开发板IP)出现提示:Remote debugging using 192.168.2.223:2345[New thread 80][Switching to thread 80]0x40002a90 in ??()同时在minicom下提示:Remote debugging from host 192.168.2.100(gdb)注
意:你的端口号必须与gdbserver开启的端口号一致,这样才能进行通信。建立链接后,就可以进行调试了。调试在Host端,跟gdb调试方法相同。
注意的是要用“c”来执行命令,不能用“r”。因为程序已经在Target Board上面由gdbserver启动了。结果输出是在Target
Board端,用超级终端查看。连接成功,这时候就可以输入各种GDB命令如list、run、next、step、break等进行程序调试了。4)如何利用串口调试如果你用串口1调试hello的话,你就要现在板子上运行命令:gdbserver hello /dev/ttyS0 (详情可以参考gdbserver目录下的readme文件)这时gdbserver就在等待gdb的应答信号了。然后在pc机上运行命令:xxx-linux-gdb hello在xxx-linux-gdb里敲入入下命令:set remotedevice /dev/ttyS0(这里设置串口1)set remote baud 9600 (这里设置串口波特率)set debug remote 1(可选)target remote /dev/ttyS0操作到这儿,gdb就应该和gdbserver联系上了。
二.insight的实现
1)首先下载insight6.8,里面已经包含gdb和gdbserver了
http://sourceware.org/insight/ 或者到chinaUnix去下载;
#./configure --target=arm-linux
--enable-sim --prefix=/usr/local/arm/insight&
--with-solib-absolute-prefix=/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/target
#make install
insight6.8 在 make的时候可能会出错,提示说 eval.c中的subscript_array数组没有初始化;
解决办法:在源码包中,找到该文件,找到定义subscript_array处,在后面帮其初始化为0即可:subscript_array[XXX]={0};
成功安装后,因为arm-linux-insight依赖gdb,所以会自动编译出arm-linux-gdb。
接着修改环境变量。
在终端运行arm-linux-insight ,但运行失败(Fc12上面运行),提示大概说:
tk-init failed.....................................
查阅发现是一个相关的bug,在其他的版本上可能没关系,但在本人的Fc12上去不行。官方说在insight6.8-1中有修补,但是在http://sourceware.org/insight/ 上下载6.8-1总是失败。
2)编译于insight配对的gdbserver
在insight6.8的目录下有gdbserver,安照gdbsver的过程 安装即可。
没有./configure 指定 solib-absolute-prefix 遇到的错误,即解决过程参考
最好用前面提及的办法,在configure时 ,就指定solib-absolute-prefix 避免麻烦
调试过程如下:
(gdb) b main
Breakpoint 1 at 0x9870: file obexftp.c, line 376.
(gdb) info b
Num Type&&&&&&&&&& Disp Enb Address&&& What
1&& breakpoint&&&& keep y&& 0x in main at obexftp.c:376
Continuing.
Error while mapping shared library sections:
/work/install/bluetooth//lib/libobexftp.so.0: No such file or directory.
Error while mapping shared library sections:
/work/install/bluetooth//lib/libc.so.6: No such file or directory.
Breakpoint 1, main (argc=1, argv=0xbed0dec4) at obexftp.c:384
384&&&&&&&&&&&& if (strstr(argv[0], "ls") != NULL)&&&&& most_recent_cmd = 'l';
若产生这个错误主要是由于该调试的应用程序使用到了额外的库,而这个库在gdb默认的搜索路径内没有
(相对与远程调试,gdb默认搜索的路径即为交叉编译器的库路径,下面我会介绍到)
因此,这里我们需要修改一下gdb默认的共享库搜索路径。
修改的办法是设置GDB的环境变量:
(gdb) show solib-absolute-prefix
The current system root is "/opt/montavista/pro/devkit/arm/v5t_le/target".
上面这个路径即GDB默认的绝对搜索路径,即交叉编译器库路径
(gdb) show solib-search-path
The search path for loading non-absolute shared library symbol files is .
(gdb) set solib-search-path /work/install/bluetooth/lib
这个路径为若在solib-absolute-prefix指定的路径内没有搜索到库,则再继续尝试从该路径进行搜索。
这点倒有点类似于系统默认库搜索路径与LD_LIBRARY_PATH的关系。
详细参考GDB手册中相关部分:
阅读(446) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。472被浏览37,333分享邀请回答jetbrains.com/clion/如下配图说明:1.
本机 Mac 下打开 PyCharm.2. 打开 FTP 插件, 连接阿里云主机(centos 6).3. 打开 SSH 插件, 连接阿里云主机.4. FTP 插件, 用于打开远程代码文件, 作编辑,修改,以及同步操作.5. SSH 插件, 远程运行,调试.至于 Clion, IDEA, RubyMine, PHPStorm, 所有操作体验,类似.适合场景:1. 题主的C,C++嵌入式开发, 经常 看到很多人是 Windows 下用 source insight, 虚拟机配置 samba, 挂载到 windows 里作编辑, 看他们编辑的无比蛋疼.2. web 服务器端开发. 偶尔会遇到我这里截图的场景, 需要在公网云主机上写一些测试代码, 利用公网, 本地改改改, 再上传, 很蛋疼, 云主机上通常是没配置的 vim, 用起来无比不爽. 所以,还是老朋友 pycharm给力.广告时间:你要用终端? 自带插件!你要连数据库? sql,还是 nosql, 插件都有!你要 SSH 登录, 插件有!你要 FTP 登录, 插件有!你要用 git,svn,hg, 插件全支持!你想作 git 提交,查看提交日志,插件有!你要用 docker, vagrant,
有有有!其他黑科技, 请慢慢发觉...篇外:这年头, 还是有很多二逼喜欢炫耀用 vim 开发, 其实, 很多二逼不知道: 同样是用 vim, 大神手里的 Vim 和 二逼手里的完全不一样. 大神手里的 Vim 已经配置的跟 IDE 没差.而很多二逼的 Vim 没任何配置,
吭哧吭哧的在那跟用记事本写代码差不多, 还自我感觉良好. Vim 有很多牛逼的功能,只是上手难度有点高. IDE 就是降低了门槛,让你轻松愉快的使用很多牛逼的功能.前阵子某个技术群, 有2B 说: 所有收费的 IDE 都是垃圾, 实在懒得喷.归根到底: 就是见识浅.JetBrains 家的 IDE, 有太多强大的功能, 真正良心.另外, 我猜测 eclipse, Visual Studio 应该有类似的功能, 感兴趣的童鞋,可以自行探索.再次默念: JetBrains大法好!JetBrains大法好!JetBrains大法好!24859 条评论分享收藏感谢收起2519 条评论分享收藏感谢收起idea使用技巧_idea远程部署和远程调试
idea使用技巧_idea远程部署和远程调试。
1 服务器配置
vi catalina.sh
在头部加上
CATALINA_OPTS=&-Dcom.sun.management.jmxremote=
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.0.50&
启动 ./catalina.sh start
2 idea 配置
1. tomcat server remoting
jmx port :1099
path from root :/
mapped as : E:\idea\sheku2.0\target\artifacts\wp_war_exploded
remote connection settings : host:
3.deployment
3 deployment server 配置
port:远程服务的特定端口 如22
Root path: /opt/apache-tomcat-8.5.20/webapps/单机搭建WinCE开发环境-远程工具调试
IT168网站原创
 作者: cnblogs 编辑:
【IT168技术文档】 上一篇已经详细介绍了如何在主机上搭建WinCE开发环境,说白了就是通过PB6.0导出一个SDK给VS2005用,似乎VS2008也可以用这个SDK。据说做系统的开发必须用VS2005+PB6.0,而应用的开发是可以用VS2008的。机器上没有装VS2008,所以不能测试了。不管怎样,我们已经有了一个模拟器代替实验板,可以用这个模拟器来调试程序了。 虽然是模拟器,但基本的外围设备都有了,包括网络、Storage Card、调试串口,也支持同步。在使用模拟器的过程中发现一个小技巧。如果从Device Emulator Manager中连接到该模拟器,则每次都必须重新设置网络和共享目录等内容。这虽然不太麻烦,但事实上是可以一劳永逸的,不必每次都来设置。方法如下,打开VS2005&&工具&&选项&&设备工具&&设备,到如下图所示界面,注意红色框里的选择项,最后点击&属性&。 点击&属性&后弹出的对话框如下图所示,点击&仿真器选项&,进行配置,就不一一介绍了,根据自己的需求进行设定。配置完成以后,下次再从Device Emulator Manager中连接此模拟器时就默认采用这里的配置项,无须再对其进行配置,省点时间。 在调试程序时,难免要用到远程工具。前段时间在调试2410开发板的WinCE6.0时就发现远程工具有一些小问题,需要手动去改文件才能用。今天在测试模拟器时又碰到了新情况。按理来说,已经同步上了,那完全可以用ActiveSync来做连接。但测试发现根本不行,截图如下,提示说&Unable to load device side components&。
大学生分期购物销量榜
已有条评论
IT168企业级1244人阅读
Spark(3)
已安装好Spark集群,本例子中使用的是spark-1.5.0. 安装方法参见:已经安装好Intellij IDEA,本例中使用的是Intellij IDEA 14.1.4,具体安装方法参见:
远程调试环境搭建过程详述
打开Intellij IDEA,File-&New -&Project
选择Scala,然后next
配置好JDK、Scala版本,填入项目名称,然后Finish
4.导入spark-assembly-1.5.0-hadoop2.4.0.jar
File-&Prject Structure-&Library
点”+”号-&选择JAVA
找到spark-1.5.0安装目录,选择spark-assembly-1.5.0-hadoop2.4.0.jar,我的机器上jar包目录为
/hadoopLearning/spark-1.5.0-bin-hadoop2.4/lib/spark-assembly-1.5.0-hadoop2.4.0.jar,然后Finish
最后点击“OK”完成导入
5.关联spark-1.5.0源代码
在Extended Library中展开spark-assembly-1.5.0-hadoop2.4.0.jar
找到org-&apache-&spark
点开下面包中的任意源文件,我在本机上选择”SparkContext.class”文件,默认情况下Intellij IDEA会为我们反编译.class文件,但源码里面没有注释,可以选择右上角的”Attach Sources”
选择源码文件目录,我的机器上源码解压在/hadoopLearning/spark-1.5.0目录,完成后“OK”
完成后会提示根目录
全部选择后点击“OK”,此时显示的不是反编译后的代码,而是关联源代码后的代码,你会发现多了很多注释
至此源码阅读环境构建完毕。
6.启动spark-1.5.0集群
root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/sbin# ./start-all.sh
7.修改spark-class脚本&
本机器上的spark-class脚本位于/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin目录
将脚本中的内容
done & &(&$RUNNER& -cp &$LAUNCH_CLASSPATH& org.apache.spark.launcher.Main &$@&)11
done & &(&$RUNNER& -cp &$LAUNCH_CLASSPATH& org.apache.spark.launcher.Main $JAVA_OPTS &$@&)11
然后在命令行中执行下列语句
export JAVA_OPTS=&$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005&
创建用于测试的Spark应用程序
选择项目中的src文件,然后右键 New-&Scala Class
然后选择Object
命名为SparkWordCount,然后点击OK,输入如下内容
import org.apache.spark.SparkContext._
import org.apache.spark.{SparkConf, SparkContext}
object SparkWordCount{
def main(args: Array[String]) {
if (args.length == 0) {
System.err.println(&Usage: SparkWordCount &inputfile& &outputfile&&)
System.exit(1)
val conf = new SparkConf().setAppName(&SparkWordCount&)
val sc = new SparkContext(conf)
val file=sc.textFile(&file:///hadoopLearning/spark-1.5.1-bin-hadoop2.4/README.md&)
val counts=file.flatMap(line=&line.split(& &))
.map(word=&(word,1))
.reduceByKey(_+_)
counts.saveAsTextFile(&file:///hadoopLearning/spark-1.5.1-bin-hadoop2.4/countReslut.txt&)
}123456789101112131415161718192021123456789101112131415161718192021
9 将Spark应用程序打包
选择项目,File-&Project Structure
选择 Artifacts
点击“+”号,然后选择”Jar”-&”From modules with dependencies”
选择SparkWordCount作为MainClass
Spark应用程序在运行是会自动加载spark-assembly-1.5.0-hadoop2.4.0.jar等jar包,为减少后期Jar包的体积,可以将spark-assembly-1.5.0-hadoop2.4.0.jar等jar包删除,这样打包时不会被打包进去。
完成后点击”OK”
再选择”Build”-&”Build Artifacts”
Action中选择“Build”
编译后在对应目录中可以看到生成的jar包文件,本机器上的目录是:
/root/IdeaProjects/SparkRemoteDebugPeoject/out/artifacts/SparkRemoteDebugPeoject_jar
10 将代码利用spark-submit提交到集群
root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin# ./spark-submit --master spark://sparkmaster:7077 --class SparkWordCount --executor-memory 1g /root/IdeaProjects/SparkRemoteDebugPeoject/out/artifacts/SparkRemoteDebugPeoject_jar hdfs://ns1/README.md hdfs://ns1/SparkWordCountResult
//注意这一行语句
Listening for transport dt_socket at address: 5005
11 Intellij IDEA中配置远程调试
Run-&Edit& Configuration
找到Remote
点击”+“号,命名为Spark_Remote_Debug,其它配置默认,Intellij IDEA已为我们默认配置
完成后,点击OK
12& 正式启动远程调试
在源码中设置断点,本例中选择在SparkSubmit.scala文件中设置断点
选择Spark_Remote_Debug
Spark控制台出现:Connected to the target VM, address: ‘localhost:5005’, transport: ‘socket’,如下图
在Debugger上可以看到
程序在运行SparkSubmit源码中设置断点处
至此,远程调试正式开始,请畅游Spark源代码吧
最后说明一下调试参数:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
参数说明:
-Xdebug 启用调试特性
-Xrunjdwp 启用JDWP实现,包含若干子选项:
transport=dt_socket JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。
address=5005 JVM在5005端口上监听请求,这个设定为一个不冲突的端口即可。
server=y y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。
suspend=y y表示启动的JVM会暂停等待,直到调试器连接上才继续执行。suspend=n,则JVM不会暂停等待。
访问:1572375次
积分:17775
排名:第632名
原创:155篇
转载:913篇
译文:34篇
评论:221条
(3)(18)(23)(19)(38)(28)(25)(22)(28)(25)(48)(39)(53)(3)(96)(74)(39)(64)(71)(57)(154)(132)(14)(2)(3)(3)(16)(2)(2)(1)

我要回帖

更多关于 adb调试环境搭建 的文章

 

随机推荐