编译烂活合集
compile上的烂活,可能导致各类的问题 在头文件定义宏 在头文件定义宏出现重复定义的其实倒还好,如果一个头文件被include,然后恰好在一个translate unit里面,有一个同名的符号,这个符号会被替换 大多数时候可能还好,但出问题就很恶心,要改头文件顺序。工程大了就是折磨 在头文件使用宏 第二种在头文件使用宏,但是有些编译单元里+了这个define,有些没有+,这样在...
compile上的烂活,可能导致各类的问题 在头文件定义宏 在头文件定义宏出现重复定义的其实倒还好,如果一个头文件被include,然后恰好在一个translate unit里面,有一个同名的符号,这个符号会被替换 大多数时候可能还好,但出问题就很恶心,要改头文件顺序。工程大了就是折磨 在头文件使用宏 第二种在头文件使用宏,但是有些编译单元里+了这个define,有些没有+,这样在...
读懂htop的一些资料,重要的是参数背后的东西 Ref 你一定用過 htop,但你有看懂每個欄位嗎 更详细的htop explained top性能分析
ubuntu开箱即用设置 Ubuntu18.04 主要做3件事 换源 装必须的软件 个人使用环境相关的初始化,比如git,vim,zsh等 这三者都可以通过一个脚本来完成,另外ubuntu18.04默认的compile-tools-chain实在是太老了,gcc7又是相当垃圾的一个版本,所以需要用ppa的源来安装稍微新一...
记一下git的一下操作 alias git config --global alias.st status git config --global alias.ci commit git config --global alias.co checkout 或者你在~/.gitconfig里面直接加上 [alias] st=status 如何看一个commit的行数层面上的改变...
推荐安装llvm的工具链,这样就能使用clangd作为LSP,实际跳转非常准确,而且速度也很快。 在vscode里面只要hook一个插件就可以,插件的名字就是clangd 需要注意的是,如果你安装了多个clangd,那么可能要在vscode的clangd插件里指明clangd的路径 comile_commands.json的生成 首先比较现代的构建系统,基本支持在generation...
正则表达升主要内容大致可以分为两块 最基础的部分(字符组,快捷方式,匹配多个数据) 进阶的应用(分组与回溯引用,替换和标记,先行断言,后行断言) 1 基础 1.1 match 最基础的match,直接输入字符就可以匹配到string中的所有包含字符的内容 1.2 字符组 []//允许可能出现的一组字符 比如 [Cc]++ is a good language//字符组...
more than breakpoint + frame + bt + as 主要关注一下他人的调试经验,以及一些高级调试技巧,比如使用ebpf进行性能分析,使用gdb进行内存分析等等。 另外xxdb调试,一个很关键的技巧,我个人觉得是要掌握data point和watch point的使用,这个可以参考这里, 另外ref的第5篇文章也有提到。 另外经常使用lldb,需要参考lldb到...
安装vs ninja就用官方的,python3 + ./configure.py –bootstrap, 然后用ninja -t compdb生成一个编译数据库,需要注意的是要打开vs的power shell 需要注意的是,在windows下,clangd的compile db要求是utf-8且只能是LF gn的编译更简单,...
inline 很早就知道std=c++11的inline其实和之前不一样了,11之后的编译器,几乎不会参考函数前的inline建议 另外inline其实不仅仅可以作用在函数头上,其实也可以作用在namespace上,在17之后甚至可以修饰变量 在11之后,inline很关键的一个作用时允许同一个函数或者是变量的定义出现在多个编译单元中,而不会报错, 最重要的其实也是针对这种ODR行为 ...
使用for range loop有个潜在的意思,就是你不要在中间再修改这个容器的大小,尤其不要随便操作迭代器 for range loop等价于实现了begin和end的容器在做一个 for(it = begin();it != end();it++) 这个时候如果你要改删除迭代器或者扩容,很可能出问题。尤其要注意在代码逻辑中,一些看似异步的回调,可能很快有sync的操作 在syn...