没有了printf(),就如同人失去了。。。随便吧。总之,没有printf()使得symbian下的debugging变得很麻烦。当然,我们可以使用那个CEikonEnv::InfoMsg()来代替,但是这个东西只在模拟器上才起作用,而且其功能实在太有限了。所以,我通常都会在工程里加上下面这样几个东西:
在这里我们利用symbian的stdlib写了两个非常简单的写log文件的function。主要想说明一个问题,那就是stdlib并没有完全被symbian所吞食,其中的一部分功能还是被保留了下来。有些时候用stdlib里的工具远比用symbian的framework要直接的多,这里就是一个最好的例子。
我们还需修改我们的.mmp文件:
别忘了,mmp文件被修改后,还得重新build一次。比如:bldmake bldfiles 或 makmake MyProject wins
最后,别忘了在你退出程序之前,调用下面这一行指令:
我通常把它放在我的AppUi的destructor里面。没有这一行东西,你的程序在退出时会报错的。
刚才我们看了如何利用stdlib来写log。虽然很酷(至少我本人这样认为),但遗憾的是它不能给我们直接的信息显示!下面我们利用CConsoleBase来做一个简陋但实用的console出来。
假设我们的view class叫做CMyView --
1. 在MyView.h里加入
2. 在MyView.cpp里加入
就这样,我们可以随时动用println()来往我们的console上写东西了。那么,怎样才能看到我们的console呢?很简单,按住那个"application"键不放就会弹出一个程序切换的东西,通过它我们就可以在我们的程序和console间随意切换了。
代码: |
#include <stdio.h> #include <stdlib.h> #include <string.h> void trace(const char* aMsg) { FILE* file = fopen("c://debug.log", "a+"); fwrite(aMsg, sizeof(char), strlen(aMsg), file); fclose(file); } void trace(const TDesC& aMsg) { FILE* file = fopen("c://debug.log", "a+"); fwrite(aMsg.Ptr(), sizeof(int), aMsg.Length(), file); fclose(file); } |
在这里我们利用symbian的stdlib写了两个非常简单的写log文件的function。主要想说明一个问题,那就是stdlib并没有完全被symbian所吞食,其中的一部分功能还是被保留了下来。有些时候用stdlib里的工具远比用symbian的framework要直接的多,这里就是一个最好的例子。
我们还需修改我们的.mmp文件:
代码: |
SYSTEMINCLUDE /epoc32/include/libc LIBRARY estlib.lib |
别忘了,mmp文件被修改后,还得重新build一次。比如:bldmake bldfiles 或 makmake MyProject wins
最后,别忘了在你退出程序之前,调用下面这一行指令:
代码: |
CloseSTDLIB(); |
我通常把它放在我的AppUi的destructor里面。没有这一行东西,你的程序在退出时会报错的。
刚才我们看了如何利用stdlib来写log。虽然很酷(至少我本人这样认为),但遗憾的是它不能给我们直接的信息显示!下面我们利用CConsoleBase来做一个简陋但实用的console出来。
假设我们的view class叫做CMyView --
1. 在MyView.h里加入
代码: |
#include <e32cons.h> public: void println(const TDesC& aMsg); private: CConsoleBase* iConsole; |
2. 在MyView.cpp里加入
代码: |
void CMyView::println(const TDesC& aMsg) { iConsole->Printf(aMsg); } void CMyView::ConstructL(const TRect& aRect) { iConsole = Console::NewL(_L("MyConsole"), TSize(KConsFullScreen, KConsFullScreen)); ... } void CMyView::~CMyView() { ... delete iConsole; } |
就这样,我们可以随时动用println()来往我们的console上写东西了。那么,怎样才能看到我们的console呢?很简单,按住那个"application"键不放就会弹出一个程序切换的东西,通过它我们就可以在我们的程序和console间随意切换了。