星期三, 六月 30, 2010

2010-04-12 乔家大院(山西之旅)

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

星期一, 六月 28, 2010

rbreak 可以在一个文件的所有函数设置断点的GDB命令

http://hellogcc.blogbus.com/logs/67436524.html
teawater@hellogcc

当我在使用GDB的时候,我总想直接设置断点到一个文件上。这样当被调试程序运行到这个文件里任何一行代码的时候,他就会被断点停止。但是GDB的普通断点指令是不支持这么作的。

现在,gdb-cvs-head中有了一个新命令(应该也会出现在gdb 7.2中):
rbreak REGEX
这个命令可以在所有满足正则表达式REGEX的函数上设置断点。
这个命令在爱这些函数上设置无条件断点,并且打印出设置了断点的函数列表。这些断点跟break命令设置的断点一样,所以你可以像操作普通断点一样操作他们。

这个命令中使用的正则表达式和grep中使用的一样,注意这个正则表达式和shell语法不太一样。比如"foo*"将对应名称中包含"fo"后面不跟o或者跟着若干个o的函数,这是一个.*结构的正则表达式。要想对应名称为foo开头的函数,要使用^foo。

当调试C++程序的时候,rbreak用在给不属于任何class的重载函数设置断点很方便。

rbreak可以直接向一个程序的所有函数设置断点,比如:
(gdb) rbreak .

rbreak FILE:REGEX
如果使用rbreak的时候增加一个文件名,这将限制rbreak的搜索范围在一个文件FILE中。这可以实现一些特别的功能,比如设置断点到一个文件中的所有函数上:
(gdb) rbreak file.c:.

2010-04-12 去乔家大院的路上(山西之旅)

20100409-20100416 山西之旅

20100409-20100416 山西之旅

20100409-20100416 山西之旅

IMG_4742

星期六, 六月 19, 2010

伪球迷看球日记之日本对荷兰

今天少有的从开场就开始看了这场球,以为能看到荷兰暴K日本,没想到日本摆出了王八阵,哥们不出头进攻,看你丫怎么办。
正巧荷兰人的进攻方式就是围着王八壳子打转,于是就闷了上半场。 其间日本还伸出头来咬了荷兰几下,竟然还相当凶狠,差点咬了荷兰。

我估计下半场还是这样,于是去洗澡。

洗完回来一看,荷兰竟然进了一球。于是坐下耐心接着看,到结束都是那一个进球。

总结下,以我伪球迷的眼光来看,这场球没劲。

星期四, 六月 17, 2010

DWARF Version 4 Released (gdb)

The final version of DWARF Version 4 is available for download from
http://dwarfstd.org.

星期五, 六月 11, 2010

电动自行车(黑白记录)

IMG_5954

星期二, 六月 08, 2010

回眸(黑白记录)

IMG_5939

星期一, 六月 07, 2010

雷人的lubuntu 10.04安装盘和gcc i386的后续(日记)

这个周末一大折腾就是觉得epc上的xubuntu不够拉轰,准备换上lubuntu。
首先是拿出刻好的ISO,然后找出前几天翻箱倒柜找出的cdrw盘 (这样能有效节省cdr)。
刻盘结束,拆下PC上的光驱,接转换器到EPC上启动等一切OK。
启动后想起若干年前某次装sled,装之前自动check报错了,然后我也没注意就装了,装到一半就装不了了,给我郁闷的。
所以这次我很小心,装之前就check了一下,报有一个文件有错。
我想估计是cdrw盘年久失修,于是又刻了一遍还是报文件有错,我就翻箱倒柜找cdr,也没找到。于是就放弃了周末的安装计划,想回头弄张cdr再装。
到了周1我多了个心眼,把安装盘的iso弄到虚拟机上check了下,擦,竟然还是有一个文件有错。于是以为是iso下载的有问题,作了个md5发现和网站上给的md5一样,擦,看来这个iso就是一个有错的。
最后在虚拟机上装了下,发现没什么问题,准备回头继续用那张cdrw装。

昨天提出的gcc i386 dwarf2的问题,由jie总和渔夫帮我测过了,他们的4.5和4.5.1都是OK的,看来新gcc已经没这个问题了,我很欣慰。

星期日, 六月 06, 2010

请用的i386 linux 下gcc版本比较新的朋友帮我作个测试(gdb)

/*
请用的i386 linux 下gcc版本比较新的朋友帮我作个测试
附件中这个程序 编译 然后在cool的最后2条指令用一下GDB的BT命令 看2行的结果是否有不同
例如:
gcc -g 7.c
gdb ./a.out
start
(gdb) start
Temporary breakpoint 1, main () at 7.c:15
15 d = cool ();
(gdb) s
During symbol reading, incomplete CFI data; unspecified registers
(e.g., eax) at 0x80483d1.
cool () at 7.c:8
8 return c;
(gdb) s
9 }
(gdb) set disassemble-next-line on
(gdb) si
0x080483ca 9 }
0x080483c8 <cool+20>: 89 c8 mov %ecx,%eax
=> 0x080483ca <cool+22>: c9 leave
0x080483cb <cool+23>: c2 04 00 ret $0x4
(gdb) bt
#0 0x080483ca in cool () at 7.c:9
#1 0x080483df in main () at 7.c:15
(gdb) si
0x080483cb in cool () at 7.c:9
9 }
0x080483c8 <cool+20>: 89 c8 mov %ecx,%eax
0x080483ca <cool+22>: c9 leave
=> 0x080483cb <cool+23>: c2 04 00 ret $0x4
(gdb) bt
#0 0x080483cb in cool () at 7.c:9
#1 0xf7e89b56 in __libc_start_main () from /lib32/libc.so.6
#2 0x08048321 in _start () at ../sysdeps/i386/elf/start.S:119

这里的不同是因为gcc 在生成dwarf2调试信息的时候 最后给了一个错误的寄存器号码 我记得去年讨论过这个问题 而且已经在gcc中修正了
但是我现在用了下我的gcc好像amd64是没问题的 但是i386是错的 所以希望英雄们帮我测下 多谢
*/

struct ty { int a; int b;};

struct ty
cool ()
{
struct ty c;

return c;
}
int
main()
{
struct ty d;

d = cool ();

return 0;
}

星期五, 六月 04, 2010

报亭(黑白记录)

IMG_5929

星期四, 六月 03, 2010

精挑细选(黑白记录)

IMG_5926

星期三, 六月 02, 2010

烤串摊(黑白记录)

IMG_5917

星期二, 六月 01, 2010

牵手(黑白记录)

IMG_5952