ARST打卡第85周[85/521]

Algorithm

LeetCode/48_旋转图像

Review

TED演讲:为什么我们会破坏爱情?怎样才能维系一段长期的关系?

我的看法:

  1. 你想要什么,你就会找到证据去证实你想要的东西,所以你想保持距离,就很难深入交流,你认为你找不到好的伴侣,你就会不会疏远ta。所以你只有保持想要好好谈恋爱,并相信你的伴侣,你才不会找佐证去认为你的伴侣不好
  2. 和伴侣合作
  3. 一起反思

Tips

论 Python 装饰器控制函数 Timeout 的正确姿势

浅析Linux中的零拷贝技术

Share

gdb的一些调试技巧

pstack 9809[PID]

gdb附加或者启动: gdb attach pid; gdb xxxx, run xxxxx xxxxx;
给某个方法设置断点 b xxx_func delete breakpoints 删除断点
给某个代码位置设置断点 b xxxx.c:1210
layout 同步查看代码 ctrl+x +a 退出 layout
n 执行下一步
s 进入函数内部
p 查看 变量内容
x 查看内存内容
c 继续执行

gdb /usr/bin/xxxx core.xxxx;
bt 查看coredump的线程的堆栈
info thread 查看其他线程情况
thread apply all bt 查看其他所有线程的堆栈
p 查看 变量内容 根据变量的内容判断coredump问题的可能原因, 常见原因:
内存访问越界(小心 memset memcpy strcpy sprintf 等函数)
使用了被释放的对象或者内存
对象内存使用了未经过初始化的指针或者对象
内容被破坏(踩内存)
p 命令 结合c里面的指针操作符使用 p *(struct everythingyouwant * 0x78dddddd)

x 查看内存内容

gdb如何把输出打印到文件中
(gdb) set logging file
(gdb) set logging on
(gdb) thread apply all bt
(gdb) set logging off

手段1: 抓包分析,通过抓包分析客户端的问题
手段2: 疑难问题可以通过strace工具分析客户端的API调用序列然后进行分析。(gitlab server的问题)
针对可能存在的内核问题,可以通过开启nfs客户端调试日志来判断
sysctl –a |grep nfs
sysctl -w nfs_debug = 65535
sysctl -w rpc_debug=65535
journalctl –kf 查看内核日志