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.