April 15th, 2012gdb 的几个技巧

set solib-search-path -- Set the search path for loading non-absolute shared library symbol files
当你使用 dlopen 之类函数时,如果断点设置在 so 里面,可能会停不下来,此时可能需要用它加载 so。

source
指定源代码路径,可能某些情况下 gdb 找不到源代码路径,需要你来指定。

help set print
某些东西打出来太难看了,用这个可以设置。比如 set print array 设定数组打印方式

frame
指定哪个 frame,默认情况下会停在最深的那个之中,frame 指令可以让你选择

generate-core-file
程序在跑,比如可能有死循环,你不能长时间 attach 在上面,用这个指令可以产生一个 core 文件慢慢研究

info
info locals, info threads
让你看到本地变量和线程,可以用 thread 来选择。

watch
让你监视看到一个变量,如果要监视一个地址,在前面加上 *,比如
watch a;
watch *0x12334567890;

break
设置断点,但也可以设置条件断点。break xxx if ......



January 1st, 2012binary hacks 记录

6、 静态库和共享库
静态库的编写通常如下:
cc -c -o foo.o goo.c
cc -c -o bar.o bar.c
ar ruv libfoo.a foo.o bar.o
查看库的内容:
ar tv libfoo.a
连接使用:cc -o baz baz.o -lfoo
Read the rest of this entry »



December 25th, 2011epoll 的 et 和 lt

本文来自:Linux那些破事儿之我的高性能

但凡对epoll有一点点了解的人,都听说过epoll有两种工作模式,即ET(Edge Trigger)和LT(Level Trigger)模式。这两种工作模式的中文翻译分别是边沿触发和电平触发,还可以称为事件触发条件触发。我倒是觉得后者的翻译更能清楚的描述这两种工作模式的特点和差别。

当epoll工作在LT模式下,只要其监控的I/O句柄具备调用者所要捕获的条件——一般是可读或可写——就会通知给调用者。如果调用者不理会这个通知,它将一直通知下去,直到这个状态发生变化。当采用多进程模式(后面会详细介绍)编写服务器软件时,根据系统任务调度特性,采用LT模式可以使得所有连接均匀的分布于每个用于处理网络请求的进程。有汽车驾驶经验的童鞋可以将LT模式理解为驾驶自动档的汽车,只要设置好你感兴趣的I/O句柄和事件类型,在具备条件的时候epoll就会通知你,只需要做相关的处理就可以了,非常轻松惬意,代价就是稍微多出的那么一点点油耗。

当epoll工作在ET模式下,情况有些变得复杂了。原因就是这种基于事件的通知是事件发生后,只会产生一次通知。如果你不去理会它,它也不会再理会你,直到下一次事件发生。这会导致一个严重的后果就是当一个编写不够良好的程序,在获得事件通知后并没有将缓冲区的数据全部读取干净,epoll也不会有任何通知,没有读取到数据可能永远都不会被读取,或者使得那部分数据超时。另外,ET模式只允许非阻塞式I/O,这就进一步加剧了上述问题的恶化。解决的方法就是反复读取缓冲区,直到返回错误。所以,如果说LT模式是自动挡,那么ET模式就是手动挡,所有情况都得自己处理,处理不好就可能熄火,好处就是经济实惠。另外,ET模式在多进程服务器软件中,会导致连接在处理进程之间的不均匀分布,不过也只是相对的,当发现问题严重时,可适当暂停某个进程做接受新连接的处理。

答案就是:如果要发送数据,大多数直接调用send或wirte就可以了,直到他们返回EAGAIN错误,才需要将它们交给epoll去监控。一旦epoll_wait返回某个被监控的I/O句柄可写,则应该立即利用epoll_ctl将它删除,直到下次再出现EAGAIN错误。不过虽然说起来简单,但是真正到具体的操作还是比较麻烦。要完整可靠的发送数据:必须记录每次实际发送的数据量来统计剩余量;当发生EAGAIN错误后,必须将剩余的数据保存在一个地方,一般放在epoll_event结构的data字段中即可;当epoll通知可写后,将剩余数据发送出去;但是当遇到压力较大时,可能在发送剩余数据的时候还会发生EAGAIN错误,必须始终记录剩余数据才行。



July 3rd, 2011Gossip 协议

一个 gossip 协议满足下面的条件:
1、协议的核心涉及到周期性的、成对的、进程之间的交互。
2、这些交互的信息有一个确定的大小。
3、在交互时,至少一个 agent 的状态改变来反应另一个的状态。
4、不需要可靠的通信。
5、交互的频率低,同令一些典型协议相比,协议的代价可以忽略。
6、对端节点的选择是随机的,节点可以从完整的节点列表选择或者从邻居节点来选择。



June 19th, 2011TCP/IP 基本概念

1、 阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有 区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,特别:返回 值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况 下认为连接是正常的,继续接收。只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要 循环读取
Read the rest of this entry »



April 24th, 2011几道题(3)

取值为 [1,n-1] 含 n 个元素的整数数组至少存在一个重复数,O(n) 时间内找出其中任意一个重复数。
如果只有一个重复数,那么好说,直接用数组的和减去 1 到 n-1 的和既可。
Read the rest of this entry »



April 24th, 2011几道题(1)

给定数组Arr[n],对于其中的每个元素Arr[i](0=Arr[i],并且i-k值最小(即最靠近)。要求O(n)时间内找出Arr中所有元素对应的Arr[k]的位置。
比如:
[src]: 9, 5, 2, 4, 7
[dst]: -1,0, 1, 1, 0。
思路:借助于栈来实现,从后向前遍历数组,while栈顶元素小于当前遍历的数组元素,则更新dst,并 pop。
Read the rest of this entry »



求一个长度小于100位且满足每位的数字和为s1(< =10000),每位的数字的平方和为s2(<=10000)的最小的数,或判无解。
Read the rest of this entry »



April 17th, 2011名人 (Celebrity)

问题描述: 在一个聚会上有 n 个人,其中有一个名人,大家都认识他,但他却不认识所有其他人。现在请你只通过询问来宾 x 是不是认识来宾 y 的方式把这个名人找出来。最多只能使用 O(n) 次询问。
Read the rest of this entry »



April 17th, 2011HDU 3389 —— String

求由 n 个1、m 个 0 组成,并且任意前缀中 1 的个数不少于 0 的个数的字符串的个数,并模 20100501。
参考组合数学第 31 页。



April 17th, 2011矩阵相关

http://hi.baidu.com/fzu_saber/blog/item/508911445c740a2fcefca352.html



April 17th, 2011递归&贪心

http://hi.baidu.com/uuriel/blog/item/9752e0f65a7e5b2b720eecce.html



April 17th, 2011mysql big num udf

直接利用 gnu gmp 库来搞。
gcc -c bigint.c -I/root/src/mysql-5.1.56/sql -I/root/src/mysql-5.1.56/include -I/root/src/mysql-5.1.56/regex -I/root/src/mysql-5.1.56 -g -O2 -Wall -g -fno-exceptions -shared -fPIC -DPIC -DMYSQL_DYNAMIC_PLUGIN -L/usr/local/mysql/lib -rdynamic -L/usr/local/mysql/lib/mysql -lz -lpthread -lcrypt -lnsl -lm -lpthread -lgmp

gcc -o bigint.so -shared bigint.o -lgmp
Read the rest of this entry »



April 15th, 2011组合数学文章

http://www.cppblog.com/sdfond/category/10266.html

http://hi.baidu.com/acmdearway/blog/category/%D7%E9%BA%CF%CA%FD%D1%A7

baidu 一快照

http://hi.baidu.com/ofeitian/blog/item/ceb99a614f1f604aebf8f8be.html



April 5th, 2011connect 的超时

connect 默认好像没法控制超时。但是可以将 connect 的描述符设置为非阻塞,然后用 select 来控制的办法。
先 socket,设置为非阻塞,然后调用 connect,如果出错的 errno 是 EINPROGRESS,则调用 select 在描述符上等待可读和可写。

http://sue602.blog.163.com/blog/static/314953072010102422418685/

http://blog.csdn.net/chensichensi/archive/2010/01/28/5264481.aspx




© 2008 - 2012 道阻且长 | iKon Wordpress Theme | Powered by Wordpress 3.3.2