1.软件p4, vs, vim, cscope.
fix step:
先reproduce
再确定出现问题的函数,行号
分析原因
fix
vs中远程调试,指定ip,port, 同时在远程主机上要同意远程调试,接受指定user。要保证code与exe文件一致。
设定断点,观察debug输入,与预想的有什么不同。观察bt,thread stack 找到出现问题的函数或者行号。
p4 中的check out, commit, diff, opened, edit, sync命令和作用。
submit step:merge changlist (from branch) (to branch)
check diff
resolve
make (so make sure the code is right)
submit (add comments)
set the bug state in Web
vim:熟悉了各种命令。
cscope,ctag:在linux中浏览代码很有用,可以找到function definition, struct definition, calling function, called function.
在一个目录中建立cscope database, 可以再主目录建立,之后只在这里使用cscope,就能找到全部引用。
linux, lib 文件的使用。 有.a 和.o的lib文件。
2.code style.
文件命名要有层次感。例如,snape_webserver_msg.c, snape_webserver_thread.c, snape_webserver_log.c, snape_client_msg.c,,,
函数命名也要有层次感, 例如,snape_webserver_msg_set_connection(), snape_webserver_thread_create(),snape_client_request_get_pic().
变量命名也要有层次感和意义。
出错处理的专门函数。
debug level:debug,info, basic, webserver, client,,,
3.函数的定义与浏览。
call graph definition.
函数名字最好能够显示出函数调用的graph。
使用hash table 保存大量类型的数据。
使用内容的md5作为这个内容的id,就可以完美配合hash table。
4.thread, process
windows 中, object , event, cs
cs同步速度较快,但是使用cs容易进入deadlock状态。因为在等待进入cs时,无法设定超时值。
互斥对象与内核对象属于内核对象,利用内核对象进行线程同步,同步速度较慢,但这种方式可在多个进程的各个对象之间进行同步。
event分为人工重置与自动重置事件,两者在细节上,不同。
5.cache implementation
client端可以使用类似os中,cache 与 虚拟内存的方法。b_modified表示是否经过更改,从而是否需要更新。每次只去拿新的东西。
而在server端,可以使用内容的MD5判断是否需要处理来到的内容,可以用多层次的MD5来更加去improve performance。例如用总体的md5,和各个部分的md5.
先判断总体MD5,如果改变,在去检查部分md5.如果没有改变,就整个都可以丢弃,不去处理。
design is very important. 代码的执行过程要完全依赖design。
6.select function
异步select, 可以让线程不去busy waiting。
但是如果需要传输内容,需要trigger signal,让它不用等到timeout,就能发送数据。
7.timestamp/timeout/ ts_diff
可以用ts_diff去同步时间。
使用timeout来防止任意操作的无限制等待
使用timestamp来决定哪一个更新。不要用counter。(无法同步,无法控制单一性)
8.xml api
在传送数据方面,可以使用xml
9.performace/memory usage
mm tools.