一些笔记(一)

一些遇见过的问题,虽然问题都不大,但是遇见的时候也是抓耳挠腮,百思不得其解。这里权作一个记录,提醒自己同时也方便通过搜索引擎找到这里的人(有么?)。

顺便说一下,最近找到一个很不错的主题,具体的样式是这样:lerry's blog。挺好看的对不,有时间我移植一下玩玩……对了,上次看到@solu的博客样式也很好看……哈。

话说以后有多个漂亮主题之后,写个定时脚本,每个几个钟头更新一下主题如何?不过貌似挺蛋疼……

另,最近看到一本好书,七周七语言,翻了翻,本来以为是像《21天学会C++》一样的废柴快餐书,不过看了看,作者的著书目的是为了让读者在浅尝辄止的学习过程掌握多种编程的范式。就我看到的,语言很浅易,但是有深度,有种莫名其妙的举重若轻之感,总之推荐~~

这一篇的东西很零碎,作个索引造福读者?话说有时候因为零碎而做索引,有时候又零碎得不想做索引,这到底是闹哪样……

另,这篇文章是我遇见问题的不完全搜罗……这些问题都可以用搜索引擎找到答案,甚至有些很傻,但是我确实被这玩意困扰过……

  1. 内核转储文件不生成

  2. Latex生成pdf不显示中文

  3. gdb16位打印

  4. flex默认值

  5. shadowsocks无sudo权限

  6. 碎碎念


内核转储文件不生成

如果您按照稍微老一点的书入门学习gdb,而您的linux版本又比较新的话,您大概会困扰:嘿,书上明明说只要我开启了ulimit -c unlimited(类似,当然您给有限空间也是可以的),然后程序一旦发生错误,就会在当前文件夹中生成内核转储文件的啊,为什么我TM这个文件夹里面没有这玩意!!?

这里先说,这个小标题其实是错的,发生了段错误或者其他什么错误,内核转储文件总是生成了的。关键是,版本比较新的linux,不会在当前文件夹生成内核转储文件,而是放入了其他地方。具体的我没有仔细研究过,只说一下解决方法。

解决办法请看这个where-is-my-core-dump-archlinux,当然您可能如我一样没有耐心去仔细读这玩意,于是下面是翻译(渣翻):

起因

我正在调试一个程序,这玩意崩掉了,并且进行过内核转储,而我希望使用gdb载入内核转储的文件以调试这个程序,但是我找不到内核转储文件……(archlinux)。

内核配置

/proc/sys/kernel/,我们能找到这些:core_pattern,core_pipe_limitcore_uses_pid

  • core_pattern 指示了转储文件的文件名,它有一些特殊的格式,比如 %E和%p。前者指示了崩溃程序的文件夹,后者是它的PID。如果这个字段由 |(pipe)开始,那么,(that the dump should be piped to the command provided right after it,)(这怎么翻……反正就是代表由管道导引至之后的命令)

  • core_pipe_limit 当使用管道引导至程序的时候,内核会在/proc/保留一会儿信息,直到程序得到信息然后退出。如果程序莫名其妙没法退出,那么下一次内核转储将会被阻塞。于是这个属性控制了同时内核转储的数目。

  • core_uses_pid 这个标志控制到底是是生成转储文件还是导引转储至程序。当它是1的时候,将会保证文件的名字中会包含程序运行时候的PID。

所以,可能您希望确定 /proc/sys/kernel/core_pattern生成的是转储文件而不是一根管道。并且,您也希望知道,转储文件到底在那里生成。这样做:

# echo "core" > /proc/sys/kernel/core_pattern
# echo "1" > /proc/sys/kernel/core_uses_pid
Shell 配置

好了,现在通过 ulimit -c unlimited来激活内核转储吧。然后用个程序测试测试,是否能在当前文件夹生成内核转储文件了?

当然,这个命令每次开了一个新的shell都会失效,把它写到bashrc里面吧~~

Latex生成pdf不显示中文

先说说前提,前提是,您已经成功的配置好了您的latex,如果没有,请严格按照wiki做。这份wiki如果我没弄错的话,是@reverland翻译的。我使用的是adobe的那套字体,这个很容易搜……对照wiki,您写好了配置,有一定几率,您会发现这样的情况:我的英文显示一点问题都没有,但是应该显示中文的地方,死活全是空白。并且latex没有报任何找不到字体的错误。如果是这个问题,请安装poppler-data。然后再生成,应该就可以了。我通过这样的方式解决了。poppler-data貌似是和pdf渲染有关的一个玩意儿。

gdb16位打印

最简单的一个问题了?x/x 。按十六位打印的关键就是x那个参数。为什么记录这个问题?我在《debug hacker》那本书看到的打印命令,没有x参数,但是是按十六位打印的,当时困惑了好久……

flex的默认值

如果您和我一样看过那本《flex与bison》,您会注意到1-5那个例子是调试不过去的,会提示您default $$使用非法。事实上,也确实是非法的,这个用法很老了,新版的bison并不支持。怎么改?

举个例子,书上的代码原本是这样

exp: factor default $$ = $1
    | exp ADD factor { $$ = $1 + $3; }
    | exp SUB factor { $$ = $1 - $3; }

请改成这样:

exp: factor {$$ = $1}
    | exp ADD factor { $$ = $1 + $3; }
    | exp SUB factor { $$ = $1 - $3; }

于是世界安静了。

shadowsocks无sudo权限

使用ss fq相当方便,但是如果您是在一台合租的vps上(我),并且没有root权限,ss的某些加密方式就变得不可能(我指的就是aes)。但是您认为其他的加密形式太过不靠谱,坚持使用这些加密方式的话,可能您就需要转而使用它的一个分支:shadowsocks-libev。这份可以直接配置使用,应该是封装好了需要文件和库了的。

碎碎念

ok,写到这里,基本上我能想到的一些问题都记录了一遍,这部分和笔记无关,不感兴趣的同学大可以无视……

先说一个今天发现的好玩(da nian)的。这个:被评论的博文,注意看首条评论,评论者义正言辞地抨击了这篇文章转载而不注明。然后,请看他自己的一篇博文twisted简单聊天室,硕大的原创图片闪爆了我的狗眼,然后这一篇文章,代码,全是《twisted network programming essentials》上面的,确切的说,是例题2-3。

之所以把这个拿出来说,倒主要不是为了打脸,而是引以为戒,毕竟严于待人,宽以待己的心理,自己也是有的。

然后列一下暑假的计划:

  • 研究twisted,然后可以的话,用它仿shadowsocks写一个fq服务器。如果不行,研究gevent。

  • 修改一下ShoujoA的代码,让代码显示不空行(注意到了么?)

  • 研究编译原理,希望能写一个简单的编译器。

  • 研究flask……

  • python的源码阅读

于是,貌似,应该,干不完吧……

嘛,再说吧。

于是阅读到这里的您辛苦了~~~

以上。