织梦CMS - 轻松建站从此开始!

罗索

Symbian学习笔记:Debug On Device

落鹤生 发布于 2009-11-25 13:42 点击:次 
在BREW的开发环境中,没有一个联机调试工具,一直是我觉得相当不方便的事情。在S60平台上做开发,至少这一点是能满足我们的需要。
TAG:

在BREW的开发环境中,没有一个联机调试工具,一直是我觉得相当不方便的事情。在S60平台上做开发,至少这一点是能满足我们的需要。

第一种方法:Carbide C++ v1.2 的 Debug On Device

Carbide C++1.2的pro.以上版本都支持设备调试,实在是一件大快人心的事。

要实现这个功能,也是相当的方便,当然前提是你用的是Carbide C++ v1.2的Pro.以上版本。

按正常模式写程序,在模拟器上都弄的差不多了,想放到设备中调试的话,只需要做下面几步:
1、先在设备中安装一个软件,安装包在carbide的安装目录下,我机器上的位置是C:\Nokia\Carbide.c++ v1.2\plugins\com.nokia.carbide.trk.support_1.2.0.29\trk\s60,下面有两个 sis文件,因为我要在N73上调试,所以我选择其中的s60_3_0_app_trk_2_7.sisx这个,另一个3_1是用于3rd.FP1手机的。安装后在手机里就有一个TRK应用了。

2、安装成功后,在手机上启动这个服务TRK,因为我是用的USB线,所以点选项,改成USB,端口是1(这里比较奇怪,明明我的端口应该是COM6)。启动后窗口显示:Status:Connected.

3、在Carbide C++中,配置一下编译输出目标为Phone Debug(GCCE),这个很重要,只有DEBUG才行。编译出SISX文件。

4、打开DEBUG窗口(即debug...),在配置中的第一项“Symbian OS App Trk“下建立一个新项。几个窗口的输入如下图所示:

 

5、点Apply,然后Debug,就可以启动调试。余下的事情与在模拟器中调试就一样了,没啥好说了。

第二种方法:利用S60 SDK自带的Ecmt工具进行DEBUG

如果我们用的是Carbide C++ 的Express版(免费版本)的话,我们没办法做设备联机调试,但是可以用SDK中的工具在程序中将调试信息打印到控制台上。在BREW平台上主要就是依靠这种方式。

Symbian提供了一个REmct可以用于远程调试,并且它还提供了两个配套工具:手机端的ecmtagent_cpp.sis和PC端的Device Connection。

这种方式比前一种要稍复杂一点了,因为涉及到代码的修改。

1、首先同样是在手机上安装一个软件ecmtagent_cpp.sis(不过3rd.的SDK下这个东西不能用,说签名过期之类的错误,只能安装3rd. FP1的SDK下的那个同名sis,唉,也不知道Nokia是咋回事)。

2、同样在调试前也是要启动手机上的ecmtagent代理,设置成USB连接(不需要选择端口了)。然后看到窗口上显示listening。

3、在PC上启动那个Device Connection,选择COM6去connect它,状态成为connected。这时发现手机上也显示connected。表明连接成功了。在Device Connection中打开那个Diagnostics工具,所有的调试信息的就是输出到它的窗口里。

4、最麻烦的是需要修改代码。

A) 修改mmp,加上这个lib。即:LIBRARY        EcmtClient.lib

B)   在要输出调试信息的那个类的h文件中加上:
#ifdef _DEBUG
#include <EcmtClient.h>
#endif

... ...
class CDemoUIAppView : public CCoeControl,MBeating {
   ... ...
    private:
#ifdef _DEBUG
        REcmt iEcmt;
#endif
C)  然后在cpp中加上一个初始化与销毁。
void CDemoUIAppView::ConstructL( const TRect& aRect )
    ...{
    CreateWindowL();   
   
... ...
   
#ifdef _DEBUG
    iEcmt.Connect();
 #endif
   
    }

CDemoUIAppView::~CDemoUIAppView()
    ...{
 ... ...
#ifdef _DEBUG
    iEcmt.Close();
 #endif
   
    }
D) 然后就是在需要输出的地方这样一下:
void CDemoUIAppView::Beat()
    ...{
        this->total++;
        if(this->total>100)
            ...{
             this->total=0;
             iHeart->Cancel();
            }
        TBuf<16> buf;
        buf.Format(KMsgFormat,this->total);
        iLabel->SetTextL(buf);
        DrawNow();
       
#ifdef _DEBUG
        iEcmt.WriteFormat(KFormattedText, this->total);
#endif

    }
5、编译程序,同样是GCCE下的Phone Debug,自己手工安装到手机里,执行它就可以了。要注意的一点是,因为此时前面的那个ecmtagent正在运行,需要将它切到后台去(不是关闭啊!!!)。在Diagnostics的窗口中就会看到输出的调试信息了。

最后要补充一点的是,我在尝试这两种调试方法的时候,经常遇到打开端口失败或者连接失败的情况,一般重启一下手机就正常了,不知道是BUG呢还是因为我同时弄了两个代理在手机里照成的冲突,如果你在使用过程中发现不顺了,不妨也重启一下手机吧。

(落鹤生)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200911/8009.html]
本文出处:未知 作者:落鹤生
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容