最近编码get或者温故了一些skill,小结记录一下。
core dump
Ubuntu系统产生core文件方法
ulimit -c unlimited
sysctl -w kernel.core_pattern=/tmp/core-%e.%p
生成的core文件在/tmp目录下,格式为core-程序名称.进程pid
ulimit设置后,仅对当前终端会话有效。
gdb字符串打印不全
有时候一个字符串比较长,调试时使用p str_val
,仅展示一部分, 后面的会以省略号代替, 可以在gdb里面敲命令set print element 0
, 然后再p str_val
则可以显示完整的字符串。
chroot以其他账户执行命令
最近测试提了一个问题,程序在使用其他账户执行的时候会崩溃, 通过chroot
命令可以用其他账户的权限执行命令。
chroot --userspec=other_username "/" sh -c "my-program"
, 可以快速重现问题, 不需要切换用户。
shell如何延迟reboot
在实现项目功能的时候, 需要在处理完后预留一段时间在重启设备。linux默认提供的reboot或者shutdown命令不支持延迟功能。 之前学习了dbus, 刚好项目python代码中有相关的命令实现。 OK, 那么我们就可以使用dbus-send命令,模拟python的dbus调用,实现延迟重启设备的功能。 具体的命令如下:
dbus-send --system --type=method_call --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.ScheduleShutdown string:"reboot" uint64:1632282493000000
uint64后面接的是执行命令的时间轴,单位为微妙,可以通过date +%s
获取到当前的时间轴, 再加上延迟的秒数,然后乘以 1000*1000。
buildroot编译debug程序
一般c语言的库现在多使用cmake了, 可以添加一个选项 -DCMAKE_BUILD_TYP=Debug,然后make pkg-dirclean && make pkg-rebuild
重新编译出来的程序就是带有符号的debug版本程序了, 可以方便地进行gdb调试。
更多
最近是比较忙的, 一边在学习sysrepo这个开源库,考虑如何解决这个库的性能问题。 另一边还要支撑处理项目的其他问题,还要一些的设计文档编写。之前的学习都暂时中断了, 工作优先。
今天公司领导发了一个后期知识分享的规划, 后期要引入极客时间专栏的学习分享,嗯, 当然学习了需要在部门内做分享。这样学习就变成了任务,习惯自学的我,总感觉怪怪的。
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。