Debug

共 105 篇文章。

一个奇怪的移位计算结果

• Development

今天 强迫症 朱小瘦同学提到一个非常有意思的问题,一个32bit的无符号整数算术右移32个bit应该得多少?

我们知道算术右移一个bit相当于除2,所以一个32bit无符号整数除以 2322^{32},理论上,应该得0。

然而事实不是这样。测试显示在 x86 系统上,一个32bit无符号整数算术右移32个bit之后得到的是原数。例如下面这个测试程序:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <stdio.h>

int
main(void /* int argc, char **argv */)
{
	unsigned int a = 0x5a5a5a5a;

	a >>= 32;

	printf("%x\n", a);

	return 0;
}

不启用任何优化的话,编译出来的程序得到的结果是:

5a5a5a5a

更进一步,我们将上面的测试改写为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <stdio.h>

int
main(void /* int argc, char **argv */)
{
	unsigned int a = 0x5a5a5a5a;
	int i;

	for (i=0; i<33; i++)
		printf("%x\n", a >> i);

	return 0;
}
阅读全文… ( 本文约 881 字,阅读大致需要 2 分钟 )

FreeBSD的textdump

• Kernel, Development

最近遇到一些奇怪的bug,因为是对恢复时间有比较高要求的系统,所以顺便研究了一下用FreeBSD的textdump来代替更早前出现的minidump的方法。

阅读全文… ( 本文约 754 字,阅读大致需要 2 分钟 )

一个问题请教WxWidget高手

• Development

WxClassInfo的析构函数(~WxClassInfo)死循环是什么原因?检查发现RTTI的那个链表有个环,但是不太明白这个表(从上下文看是由Register()方法维护的)为什么能出现环?

阅读全文… ( 本文约 155 字,阅读大致需要 1 分钟 )

Python的浮点数 __str__ 方法的小问题

• Development

今天 康神 发现一个浮点数的问题,一个 class 里面有两个浮点(double) 成员 x、y,然后用 return (self.x, self.y).__str__() 返回时,发现输出是 (39.210279999999997, 116.34528) 而不是希望的 (116.345280, 39.210280)。

查了一下,改成 return “(%f, %f)” % (self.x, self.y) 解决。C里面printf的 %f 默认显示小数点后面6位,但是 __str__ 似乎自己对于浮点数精度有些想法?没看 Python 具体的实现。

参与评论

enigmail-thunderbird与gcc 4.2

• Development

前一阵子一直无法在 FreeBSD/amd64 上面利用 engimail-thunderbird 来进行 PGP 签名。简单说来,一开始是注册控件的时候 signal 11,留下怪怪的backtrace,到后来索性没反应了。

发信到 engimail 的邮件列表,结果他们也觉得很奇怪。

阅读全文… ( 本文约 123 字,阅读大致需要 1 分钟 )

graphics/php5-gd的bug

• Development

今天 Howard Wang 找我抱怨 php5-gd 依赖 xorg 的问题。大概看了一下,很明显这是一个 bug,不过并不是很好修,目前并没有很高效的方式来检测GD在联编过程中是否启用了XPM(默认情况下并不是这样)。

阅读全文… ( 本文约 210 字,阅读大致需要 1 分钟 )

关于fork的竞态条件修正MFC了

• Kernel

今年2月底的时候我跟 李逵 发现了一个fork的race,然后我做了一个fix。在当时看来,这个fix并不是很理想(会在进程fork的时候增加两次PROC锁的持放操作),但与有人提出来的另外一种解决方案,也就是利用EVENTHANDLER(9)机制去作callback相比,这个解法没有活锁问题。

阅读全文… ( 本文约 274 字,阅读大致需要 1 分钟 )

mod_security2看来代码品质不是很高啊

• Security

去掉以后,下列症状消失:

pid 11673 (httpd), uid 80: exited on signal 11
pid 25946 (httpd), uid 80: exited on signal 11
pid 26292 (httpd), uid 80: exited on signal 11
pid 13623 (httpd), uid 80: exited on signal 11
pid 27096 (httpd), uid 80: exited on signal 11
pid 31838 (httpd), uid 80: exited on signal 11
pid 30847 (httpd), uid 80: exited on signal 11
pid 38579 (httpd), uid 80: exited on signal 11
pid 38269 (httpd), uid 80: exited on signal 11
pid 34011 (httpd), uid 80: exited on signal 11
pid 38698 (httpd), uid 80: exited on signal 11
pid 32137 (httpd), uid 80: exited on signal 11
pid 38754 (httpd), uid 80: exited on signal 11
pid 38756 (httpd), uid 80: exited on signal 11
pid 38755 (httpd), uid 80: exited on signal 11
pid 38759 (httpd), uid 80: exited on signal 11
pid 38760 (httpd), uid 80: exited on signal 11
pid 39259 (httpd), uid 80: exited on signal 11
pid 39253 (httpd), uid 80: exited on signal 11

阅读全文… ( 本文约 214 字,阅读大致需要 1 分钟 )