Monthly Archives: February 2018

GDB 从裸奔到穿戴整齐

无数次被问道:你在终端下怎么调试更高效?或者怎么在 Vim 里调试?好吧,今天统一回答下,我从来不在 vim 里调试,因为它还不成熟。那除了命令行 GDB 裸奔以外,终端下还有没有更高效的方法?能够让我事半功倍? 当然有,选择恰当的工具和方法,让 GDB 调试效率成倍的提升并没有任何问题。当然,前提条件是你至少会在使用最原始的 GDB。 裸奔状态:原始的 GDB 命令行 穿上各种衣服前,至少得先学会裸奔,找份简单的 GDB cheat sheet 对照一下: 生产环境中出现崩溃时,因线上服务器一般没有开发环境,也无配套源代码,所以程序崩溃后,如果你懒得把 core 文件拖回到开发机检查,可以先在线上服务器先简单gdb看一下。 GDB命令密密麻麻,常用的也就表格上那几条,比如进去以后第一步先用 bt 查看一下调用栈,info local查看一下本地变量,再配合 up/down 在整个调用栈的不同层次之间上下移动一下,检查各处局部变量的值,print 一下某个表达式,即便没代码,看下符号和反汇编,一般也能调试个七七八八。 碰到复杂点的 BUG,必须配合源代码了,那你得把 core 文件拉到开发环境中,再用 gdb 对照源代码调试,配合 list [行号] 指令查看当前运行的源代码,再配合其他方法进行调试。 那么这时候,如果调试复杂度继续上升,你需要不断的断点,每次 next … Continue reading

Loading

Posted in 随笔 | Tagged | 1 Comment

有哪些命令行的软件堪称神器?

发几个好玩的玩具给大家新年玩玩: ⚡ cppman:C++ 98/11/14 手册查询 for Linux/MacOS 我知道你在 Windows 下有 Zeal ,你在 Mac OS X 用 Dash,但是你想在服务器上或者任意命令行环境下查看 C/C++ 语言手册么?偶尔看别人代码里调用到一个冷僻的 libc 函数(比如 strpbrk这种),网页搜索太慢,运行 zeal/dash 麻烦,想在命令行直接查看帮助怎么办? 这是个台湾小伙写的工具,使用很简单,跟 man一样,命令行输入: cppman std::thread 即可查看 thread 相关手册 可以配置到终端编辑器里设定个快捷键,一按下去就可以显示光标下面 token 的 reference,清晰的排版,美观的着色: 关键是速度快,比你开网页查便捷多了, Windows 下用不了,可以在 WSL/MSYS/Cygwin 下面安装了一个,编辑器里照样一键弹出对应的帮助窗口,默认是在线请求 … Continue reading

Loading

Posted in 随笔 | Tagged , | Leave a comment

终端里正确设置 ALT 键和 BS 键

不管你在终端下使用 vim/neovim, emacs, nano 或者 zsh,你都会碰到使用 ALT 键的情况(终端下叫做 meta键),而由于历史原因,大部分终端软件的默认设置都无法正确使用 ALT 键。 要在终端下正确使用 ALT键最简单的做法是:首先将终端软件的 “使用 Alt键作为 Meta键” 的功能打开,意思是如果你在终端下按下 ALT+X,那么终端软件将会发送 <ESC>x 两个字节过去,字节码为:0x27, 0x78。 SecureCRT:终端设置 XShell4 终端设置: 其他终端软件里: Putty/MinTTY 默认ALT+X 就是发送 <ESC>x过去 Mac下面的 iTerm2/Terminal.app 需要跟 XShell / SecureCRT一样设置一下 Ubuntu 下面的 GnomeTerminal 默认也是发送 <ESC>x过去的 … Continue reading

Loading

Posted in 随笔 | Tagged | 19 Comments