Symbian學(xué)習(xí)筆記(1)——Debug On Device
在BREW的開發(fā)環(huán)境中,沒有一個聯(lián)機調(diào)試工具,一直是我覺得相當不方便的事情。在S60平臺上做開發(fā),至少這一點是能滿足我們的需要。
第一種方法:Carbide C++ v1.2 的 Debug On Device
Carbide C++1.2的pro.以上版本都支持設(shè)備調(diào)試,實在是一件大快人心的事。
要實現(xiàn)這個功能,也是相當?shù)姆奖?,當然前提是你用的是Carbide C++ v1.2的Pro.以上版本。
按正常模式寫程序,在模擬器上都弄的差不多了,想放到設(shè)備中調(diào)試的話,只需要做下面幾步:
1、先在設(shè)備中安裝一個軟件,安裝包在carbide的安裝目錄下,我機器上的位置是C:\Nokia\Carbide.c++ v1.2\plugins\com.nokia.carbide.trk.support_1.2.0.29\trk\s60,下面有兩個 sis文件,因為我要在N73上調(diào)試,所以我選擇其中的s60_3_0_app_trk_2_7.sisx這個,另一個3_1是用于3rd.FP1手機的。安裝后在手機里就有一個TRK應(yīng)用了。
2、安裝成功后,在手機上啟動這個服務(wù)TRK,因為我是用的USB線,所以點選項,改成USB,端口是1(這里比較奇怪,明明我的端口應(yīng)該是COM6)。啟動后窗口顯示:Status:Connected.
3、在Carbide C++中,配置一下編譯輸出目標為Phone Debug(GCCE),這個很重要,只有DEBUG才行。編譯出SISX文件。
4、打開DEBUG窗口(即debug...),在配置中的第一項“Symbian OS App Trk“下建立一個新項。幾個窗口的輸入如下圖所示:
5、點Apply,然后Debug,就可以啟動調(diào)試。余下的事情與在模擬器中調(diào)試就一樣了,沒啥好說了。
第二種方法:利用S60 SDK自帶的Ecmt工具進行DEBUG
如果我們用的是Carbide C++ 的Express版(免費版本)的話,我們沒辦法做設(shè)備聯(lián)機調(diào)試,但是可以用SDK中的工具在程序中將調(diào)試信息打印到控制臺上。在BREW平臺上主要就是依靠這種方式。
Symbian提供了一個REmct可以用于遠程調(diào)試,并且它還提供了兩個配套工具:手機端的ecmtagent_cpp.sis和PC端的Device Connection。
這種方式比前一種要稍復(fù)雜一點了,因為涉及到代碼的修改。
1、首先同樣是在手機上安裝一個軟件ecmtagent_cpp.sis(不過3rd.的SDK下這個東西不能用,說簽名過期之類的錯誤,只能安裝3rd. FP1的SDK下的那個同名sis,唉,也不知道Nokia是咋回事)。
2、同樣在調(diào)試前也是要啟動手機上的ecmtagent代理,設(shè)置成USB連接(不需要選擇端口了)。然后看到窗口上顯示listening。
3、 在PC上啟動那個Device Connection,選擇COM6去connect它,狀態(tài)成為connected。這時發(fā)現(xiàn)手機上也顯示connected。表明連接成功了。在 Device Connection中打開那個Diagnostics工具,所有的調(diào)試信息的就是輸出到它的窗口里。
4、最麻煩的是需要修改代碼。
A) 修改mmp,加上這個lib。即:LIBRARY EcmtClient.lib
B) 在要輸出調(diào)試信息的那個類的h文件中加上:
#include <EcmtClient.h>
#endif
... ...
class CDemoUIAppView : public CCoeControl,MBeating {
... ...
private:
#ifdef _DEBUG
REcmt iEcmt;
#endif
C) 然后在cpp中加上一個初始化與銷毀。
...{
CreateWindowL();
... ...
#ifdef _DEBUG
iEcmt.Connect();
#endif
}
...{
... ...
#ifdef _DEBUG
iEcmt.Close();
#endif
}
D) 然后就是在需要輸出的地方這樣一下:
...{
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,自己手工安裝到手機里,執(zhí)行它就可以了。要注意的一點是,因為此時前面的那個ecmtagent正在運行,需要將它切到后臺去(不是關(guān)閉?。。。。T贒iagnostics的窗口中就會看到輸出的調(diào)試信息了。
最后要補充一點的是,我在嘗試這兩種調(diào)試方法的時候,經(jīng)常遇到打開端口失敗或者連接失敗的情況,一般重啟一下手機就正常了,不知道是BUG呢還是因為我同時弄了兩個代理在手機里照成的沖突,如果你在使用過程中發(fā)現(xiàn)不順了,不妨也重啟一下手機吧。
#include <EcmtClient.h>
#endif
... ...
class CDemoUIAppView : public CCoeControl,MBeating {
... ...
private:
#ifdef _DEBUG
REcmt iEcmt;
#endif
【編輯推薦】