c程序设计调试技巧
superguang9527
这个作者很懒,什么都没留下…
展开
-
嵌入式C软件维护经验
本人工作中维护着一个基于嵌入式Linux的一份SIP协议栈。一年多来,有如下心得:(1)非常熟悉你维护的代码,并且为它的体系结构、各个模块(含Makefile之类的软件构建配置文件)、重要函数、重要CASE编写文档。使用Source-Navigator之类的工具高效地浏览整个工程,理清体系结构、调用关系。(2) 嵌入式软件测试技巧:一是要做单元测试、集成测试转载 2009-07-16 08:49:00 · 983 阅读 · 0 评论 -
write solid code 心得续
write solid code 心得续 1.程序员设计函数时,有时把多个功能给了一个函数,然后利用参数来选择相应的功能,比如void* realloc( void* pv, size_t size );这个函数同时有增大,缩小buf的功能,用参数 size作判断 ;或者,比如 strcmp(str1,str2)用返回 0 正数 负数来 返回结果 ,这样的函数 可读性 防错能力很差,原创 2009-07-17 09:07:00 · 566 阅读 · 0 评论 -
write solid code:不要使用output memory作为函数内使用的buffer
1.不要使用output memory作为函数内使用的buffer,要使用内部buffer,然后cpy出去错误实例: void UnsToStr(unsigned u,char *str){ char *pch; /* u超出范围吗?使用UlongToStr… */ ASSERT(u/* 将每一位数字自后向前存储 * 字符串足够大以便能存储u的原创 2009-08-18 08:55:00 · 408 阅读 · 0 评论 -
高效大小写转换
汇编中有一种非常高效的方法,即位运算。 大写 二进制 小写 二进制 A 01000001 a 01100001 B 01000010 b 01100010 C 01000011 c 01100011 D 01000100 d 01100100 看出来什么吗? 大小写只有第6位不一样。 故只要改变第6位即可。 大写--》小写:or(|转载 2009-08-27 17:07:00 · 590 阅读 · 0 评论 -
嵌入式软件设计中层与层之间接口的设计方式
1. 函数调用缺点:导致层与层之间紧耦合;上下层必须在统一上下文环境(任务环境);有可能产生循环依赖上层很可能并非简单的函数模块,而是具有活动能力的任务模块,但是下层通过直接函数调用方式调用上层接口只能保持在同一个任务运行环境中。并且,上下模块间由此存在循环的依赖关系,即使是在同一个任务环境中实现的上下层模块,这种循环依赖关系也是不利于体系结构设计的。2. 回调函数方式回调函数转载 2009-08-28 16:32:00 · 1524 阅读 · 0 评论 -
断言式编程再理解
断言式编程再理解通过最近的一个项目,对断言式编写无错程序有了些心得。程序逻辑中在运行中有可能出现的错误要在程序中做处理,比如 malloc失败等,而断言要加在程序在逻辑上不应该出现的错误的地方。在我们编写程序的时候,编写无错程序的秘诀就是“要尽早发现错误”,在开始一个函数时加上前置条件,即进入函数前一些重要的变量应该是什么状态要测试,在函数的末尾加上后置条件,即函数执行后一些变量或数据结构应该是什原创 2009-08-31 15:25:00 · 694 阅读 · 0 评论 -
多行代码#define 的技巧
先看一个例子 #define QF_INT_LOCK(_KEY) do{/(_KEY)=get_int_status(); / int_lock(); / }while(0) 在写多行的代码define时 ,最好在外层加上do{原创 2009-07-09 08:26:00 · 622 阅读 · 2 评论 -
write solid code 心得
1如果算法设计中程序不应该进入switch中的default,为了尽早查出错误可以在default中加断言 default: ASSERT( FALSE) ; I* We should never get here. */ break: 2.对一个程序中的关键函数,特别是这个部分如果被优化,用了复杂的算法,在调试时最好另外用简单的算法写一个功能相同的函数,与关键函数一同运行并在运行完后用断言比原创 2009-07-12 14:48:00 · 424 阅读 · 0 评论 -
assert vs Defensive programming
Defensive programming 是程序员一般使用的编程方式,也就是对所有有可能(也许是在设计逻辑上没有可能出现的值)的出现的错误进行处理。但这种编程方式会在调试阶段隐瞒错误。要记住,我们编写程序的目的是编写无错的代码,是要让所有的错误不应该再发生,而不是每次去安全处理发生的错误,所以Defensive programming和编写无错程序的理念有点矛盾。但 Defensive原创 2009-07-10 10:01:00 · 367 阅读 · 0 评论