临江仙·夜归临皋
临江仙·夜归临皋
[宋] 苏轼
夜饮东坡醒复醉,归来仿佛三更。家童鼻息已雷鸣。敲门都不应,倚杖听江声。
长恨此身非我有,何时忘却营营。夜阑风静縠纹平。小舟从此逝,江海寄余生。
自遣
自遣
[唐] 李群玉
翻覆升沉百岁中,前途一半已成空。
浮生暂寄梦中梦,世事如闻风里风。
修竹万竿资阒寂,古书千卷要穷通。
一壶浊酒暄和景,谁会陶然失马翁。
赠卫八处士
赠卫八处士
[唐] 杜甫
人生不相见,动如参与商。
今夕复何夕,共此灯烛光。
少壮能几时,鬓发各已苍。
访旧半为鬼,惊呼热中肠。
焉知二十载,重上君子堂。
昔别君未婚,儿女忽成行。
怡然敬父执,问我来何方。
问答乃未已,驱儿罗酒浆。
夜雨剪春韭,新炊间黄粱。
主称会面难,一举累十觞。
十觞亦不醉,感子故意长。
明日隔山岳,世事两茫茫。
Linux ps常用命令
1. 查看所有进程1$ ps aux
2. 查看进程启动时间1$ ps -eo pid,lstart,cmd
题临安山水
题临安山水
[金] 完颜亮
万里车书一混同,江南岂有别疆封?
提兵百万西湖上,立马吴山第一峰!
Linux GDB 常用命令
1. 编译注意:
不要使用优化(即使用-O0选项)
带上调试信息(即使用-g选项)
-g的调试信息级别是2,使用-g3会带上额外调试信息(如关于宏的)
总而言之,最好使用-g3 -O0
2. help system2.1 help命令help缩写为h
help <command> 输出某个命令的全部文档
2.2 apropos命令apropos [-v] <regexp>遍历所有命令、别名和文档查找<regexp>的匹配
2.3 其他complete <args>输出<args>所有可能的命令补全结果
info命令用于获取正在调试的程序的状态信息
show命令用于获取GDB本身的状态信息
3. 启动GDB3.1 正常启动直接指定二进制文件,例如gdb myprogram
或者先不带参数启动GDB再用file命令加载,例如
1234$ gdb(gdb) file myprogramReading symbols from myprogram...(gdb)
inferior在GDB里基本等同于进程,它可以包含多个线 ...
Linux tmux命令常见用法
1. 简介终端复用器,terminal multiplexer的简称。
将终端和终端里运行的命令解绑。
2. 常用命令2.1 新建会话
tmux new : 创建会话,会话名默认为编号:0,1,2…
tmux new -s <session-name>: 创建会话并指定会话名
2.2 分离会话Ctrl+b d或者tmux detach
2.3 接入会话tmux attach -t <session-name>
2.4 切换会话tmux switch -t <session-name>
2.5 重命名会话tmux rename-session -t <old-session-name> <new-session-name>
2.6 查看会话tmux ls
memory sanitizer
1. 简介MemorySanitizer简称msan,用于发现C/C++程序中对未初始化内存的读取。
msan是比特精度的。
msan的功能是Valgrind功能的子集,但运行速度更快。
msan使用stderr打印错误报告
msan发现错误即报告,而不是等到程序即将结束时统一报告
msan发现如下bug并报告warning:
在条件分支中使用未初始化的值。
使用未初始化的指针进行内存访问。
函数返回未初始化的值(这是未定义行为,可以使用-fno-sanitize-memory-param-retval来disable这项检查)。
传递未初始化数据到一些libc函数中。
2. 使用方法2.1 常用使用方法
使用clang编译器
使用编译选项-fsanitize=memory -fPIE -pie -fno-omit-frame-pointer -g
默认错误报告是fatal的,即发现并报告第一个错误后就退出,如需发现多个错误需使用编译选项-fsanitize-recover=memory
例如如下程序a.cc:
12345678910111213#incl ...
Linux less命令常见用法
1. 简介
类似于more命令,但除了向前(下)移动也允许向后(上)移动
不会在启动时读入整个输入文件,因此比vi启动更快
less的命令基于more和vi
less的命令前可以加一个十进制数N,某些命令可以使用它
2. 常用命令
h或H: 显示命令帮助信息
q: 退出less
<SPACE>: 前进(向下)N行,默认一个window
b: 后退N行,默认一个window
<ENTER>或j: 前进N行,默认1
k或y: 后退N行,默认1
d: 前进N行,默认半个window;如果指定了N,它成为后续d和u命令的默认值
u: 后退N行,默认半个window;如果指定了N,它成为后续d和u命令的默认值
R: 重新加载当前文件;在查看的当前文件被改变时很有用
F: 前进至文件结尾并保持继续读文件(类似于tail -f),按^C停止等待文件生长
g: 跳转到第N行,默认第1行;如果N很大这个命令可能很慢
G: 跳转到第N行,默认最后一行;如果N很大这个命令可能很慢
p或%: 跳转到N%位置处,N的取值范围为[0, 100],且可以包含 ...
address sanitizer算法原理
1. 算法原理精简版(TL;DR)1.1 运行时库asan运行时库提供了asan版的malloc和free函数。
malloc函数在分配的内存区域周围会再分配redzones内存并在redzones内存投毒(poisoned)。
free函数对被释放的内存区域投毒(poisoned),并将它放到临时隔离队列(quarantine queue)中,使它在一段时间内不会被再malloc。
1.2 插桩程序中的内存访问操作会做如下转换:
转换前:
1*address = ...; // or: ... = *address;
转换后:
1234if (IsPoisoned(address)) { ReportError(address, kAccessSize, kIsWrite);}*address = ...; // or: ... = *address;
2. 内存映射2.1 内存划分整个内存虚拟地址空间被分为不相交的两类:
Mem:被常规应用代码使用的内存区域。
Shadow:用于保存元数据(称为shadow values)。
2.2 内 ...