摘要:
问题 在使用gdb加载core文件开始的时候会显示导致core的直接原因,但是随着分析的进行,gdb的输出会越来越多,如果想回过头来再次(again)确认下这些导致core的信息,此时有没有什么命令可以把加载core文件时的信息再输出一遍? 在stackoverflow上相似问题。 when loa 阅读全文
摘要:
问题 在初始化一个类的时候,在某些情况下,希望先初始化对象的一个字段,然后其它字段根据这个已经初始化的字段再初始化。简单来说,就是类似于这种初始化调用想精简一下 struct A { int x, y; }; int tmp = foo(); A a{tmp, tmp + 10} 这种形式,是否可以 阅读全文
摘要:
背景 在vim的使用过程中,会发现一些比较冷门但是也非常有用的命令,整理备忘一下。 行中(gm) 修改一行开始和结尾都有比较方便的命令,但是当行比较长的时候,如果想移动到中间某个为止就比较麻烦,此时可以通过gm来首先移动到行的中间,然后再使用w/b甚至f/u来进行小范围移动。 复选(gv) 在手动缩 阅读全文
摘要:
逗号的意义 在C语言中,逗号用来表示一个中间的表达式;而在lua和Python中,逗号通常用来作为多值赋值的一种语法。这就导致一个有意思的现象,相同的语句在C/LUA语言中不同的意义。例如下面的句子 x , y = z, u 在lua中,这个表示x=z切y=u,而在C中则只表示y=z。在脚本语言将逗 阅读全文
摘要:
拷贝二进制(elf)文件 在拷贝二进制文件的时候,如果文件是一个可执行文件,并且有一个进程在运行这个可执行文件,那么拷贝的时候会出现"文本忙"(ETXTBSY)的错误提示,并且拷贝失败。这还算是好的情况,如果拷贝的是一个so文件,并且此时这个so正在被某个进程使用,那么此时拷贝可以成功,但是可能会导 阅读全文
摘要:
指令长度 python python的指令定长,长度为16bit,其中8bit操作码,8bit操作数。 ///@file: Python-3.6.0\Include\code.h typedef uint16_t _Py_CODEUNIT; #ifdef WORDS_BIGENDIAN # defi 阅读全文
摘要:
语法分析 和通常的有语法的结构一样,proto的编译也经过词法(tokenize)和语法(parse)两个阶段,相关代码分别在tokenizer.cc和parser.cc两个文件中。 /// @file: protobuf\src\google\protobuf\compiler\parser.cc 阅读全文
摘要:
位置决定语义 在下面的python代码中,忽略掉语法错误,源码中同样一个单词tsecer在不同的位置有不同的意义 import之后 在import之后的tsecer是作为一个简单的字面字符串来处理:这里的意思是这个tsecer不会有任何变量(及相关展开)的意义,它更类似于C语言中的字符串,也就是字面 阅读全文
摘要:
现象 在gdb中,如果想看一个struct的某个field的偏移量,和C语言一样可以通过对一个0地址变量取地址,然后取成员的偏移量获得。更神奇的地方在于和C语言一样,这里也不会触发内存访问异常。 另外还有一个奇怪的现象:对于x取地址的时候没有问题,但是对于c字段取地址之后会有一个莫名其妙的错误提示" 阅读全文
摘要:
问题 在使用git diff 展示c/c++文件修改内容时,除了显示修改上下文外,输出还贴心的展示了修改所在的函数。尽管这个展示并不总是准确,但是能够做到大部分情况下准确也已经相当不错:是不是git内置了c语言这种高级语言的语法分析器?另外,git的这种分析在什么情况下会不准确? 例如,在下面的例子 阅读全文