利用dmesg和addr2line来重现bug

Publish: May 21, 2015 Category: Shell,C/C++ No Comments

    有些时候,我们的程序crash了,但是我们没有保存core dump信息,这时如果我们想要知道程序在哪个位置出错,就不是那么容易了。

    下面有一种方法,可以大致判断出程序出错的大致位置。

1、用dmesg查找出错的代码段地址:
命令: $dmesg
或打开文件: $vim /var/log/kern

显示结果为:
May 21 13:50:46 mx543-45 kernel: : qmail-smtpd[21604]: segfault at 7fff51057000 ip 000000000041328a sp 00007fff51054720 error 6 in qmail-smtpd[400000+54000]

其中的ip后面的地址是程序出错处的地址。


2、利用addr2line将地址解析成函数名:
命令: $addr2line -e program_name ip -f
使用上面的例子:
    $addr2line -e /var/qmail/bin/qmail-smtpd 000000000041328a -f
    mail_body_recv
    ??:0

其中mail_body_recv即是出错的函数名,然后就可以找到相应的出错代码了。




unix时间戳 转换

Publish: May 15, 2015 Category: Shell No Comments

一、Linux Bash 实现

1、获取unix timestamp:
命令:date "+%s"
输出:1372654714
2、获取北京时间:
命令:date '+%Y-%m-%d %H:%M:%S'
输出:2013-07-01 12:55:56
3、unix timestamp 转 北京时间:
命令:date -d@1372654714 '+%Y-%m-%d %H:%M:%S'
输出:2013-07-01 12:58:34
4、北京时间 转 unix timestamp:
命令:date -d"2013-07-01 12:58:34" '+%s'
输出:1372654714

阅读剩余部分...