Ubuntu实用指南
1、查看系统版本是32位还是64位
uname -a
2、不断更新中..
Posted: 七月 30th, 2011 under Linux操作&开发 - No Comments.
Linux段错误定位
gdb filename
b sighandler
r
bt
Posted: 一月 13th, 2011 under Linux操作&开发 - No Comments.
windows用ren命令批量更改文件名
cmd进入dos界面
进入相关目录使用
如:ren *.c *.txt
这样代码就可以放到只支持.txt文件的手机上阅读了!
Posted: 十二月 23rd, 2010 under Windows操作&开发 - No Comments.
assert
在容易出错的地方多使用断言,如在swf文件tag解析时经常会遇到解析后的parser.pos的值与解析前parser.pos+taglen的值不相符的情况,这说明我们tag解析是有问题的。在这里我们使用了AvmAssert( _pos == parser.pos ); 因为一个使用了一个简单的断言,我在解析tag时可以快速发现解析哪个tag时出了错误。同样假使我们的QJY浏览器未加载或加载不成功时给个断言,那么也节省了一天的时间来排查这个低级错误了。接下来让我们看看assert是怎么实现的。
首先让我们看看tamarin里面是如何实现的。Tamarin里用AvmAssert来实现assert。
AvmAssert的实现:
#define AvmAssert(condition) \
_AvmAssert((condition), __LINE__,__FILE__)
再看_AvmAssert的实现
_AvmAssert的实现:
#define _AvmAssert(condition, line_, file_) \
__AvmAssert((condition), line_, file_)
__AvmAssert的实现:
#define __AvmAssert(condition, line_, file_) \
do { AvmAssertMsg((condition), \
“Assertion failed: \”" #condition ”\” (“ #file_ ”:” #line_ ”)\n”); \
} while (0) /* no semi */
AvmAssertMsg的实现:
#define AvmAssertMsg(condition,message) \
do { avmplus::_AvmAssertMsg((condition), (message)); } while (0) /* no semi */
_AvmAssertMsg的实现:
inline void _AvmAssertMsg(int32_t condition, const char* message) {
if (!condition)
AvmAssertFail(message);
}
AvmAssertFail的现实:
inline void AvmAssertFail(const char *message) {
#if defined(AVMPLUS_CUSTOM_ASSERTION_HANDLER)
AVMPlusCustomAssertionHandler(message);
#else
AvmDebugMsg(message, true);
#endif
}
最后又会调用VMPI_debugLog
接下来我们通过微软实现的assert来理解它。
#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
让代码好看点:
#define assert(_Expression)
(void)
(
(!!(_Expression))
|| (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0)
)
问题:
1、 (void) 这是作什么的?
答:消除返回值 因为assert本身是没有返回值的
2、!!(_Expression))前的两个!!是作什么用的?
答:让编译器认为_Expression是一个bool值
3、(_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) 这个逗号表达式有什么用?
(_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) 如果失败就会报错,如果成功则返回0
本文参照:
http://topic.csdn.net/u/20070702/10/f65e3741-3f64-4cbe-8625-dc152438d3bb.html
Posted: 十二月 23rd, 2010 under C++基础 - No Comments.
ubuntu获取android源代码
1、安装所需的工具及库文件
sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
2、安装repo在home目录下创建bin目录然后给予执行权限
$ cd ~
$ mkdir bin
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
接下来把bin目录加入$PATH:
$ export PATH=$HOME/bin:$PATH
3、在home目录下新建mydroid目录
mkdir mydroid
4、下载源代码
$ repo init -u git://android.git.kernel.org/platform/manifest.git
$ repo sync
Posted: 十二月 21st, 2010 under Android开发 - No Comments.