Make Everyday Count

人如果没有梦想, 那和咸鱼有什么分别

调试 erlang 的代码, 基本上还是靠打 log. 在一个函数进入或退出时打印参数和返回值, 是一个有效的调试手段. 如果是用 c++, 实现这样一个 function logger 可以做的很简单. 但 erlang 里没有对象, 构造, 析构这样的东西, 得另想办法. 还好我们有 parse_transform.

这次去 yosemite 是看了这个攻略: http://yhschang.blogspot.com/2012/07/yosemite_18.html 像作者表示感谢.

最近遇到一个 erlang VM 的 crash, 借这个机会熟悉了一下 gdb 的调试 erlang VM.

一直很喜欢 Windbg 里的 DML 的用法. 也就是点击一个 link, 可以在 windbg 中执行一条命令. 于是想把它搬到 terminal 里. 实现点击一个 link 就能在 terminal 里执行一条命令.

最近在使用 Breakpad 的过程当中, 发现了在指定了 symbol 的情况下 stackwalk 一个 dump 文件的调用栈只显示了一个 frame, 而在不指定 symbol 的情况下, 却能显示完整的调用栈, 当然, 所有的函数名都没有. 指定了 symbol, 只显示了一个 frame. 同时显示了 crash 的函数

When you’re inspecting a dump file using Windbg, you may want to know the states of an object, to be specific, the members of a C++ object in the context. In order to do that, you need to find out the location of the object ie. the ‘this’ ptr. but...

最近在调试一个 iOS app 的时候需要在内存中查找一个特定的字符串. 搜索了一下调试器 (lldb/gdb) 的文档. 貌似在 osx/ios 上这两个调试器都没有 search memory 的命令!? 然后就开始了漫长的寻找. 整个过程颇为周折. 记下来备忘, 也希望能帮助到别人.

用 NDK 编译一个 .so, 代码里用到了 boost::algorithm 里的一些字符串算法比如: boost::find_head(). 链接的 c++ 库是 libgnustl_shared.so, 或者 libgnustl_static.a. 遇到的编译错误是: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<char> const&#038;)' 先查看 basic_string.h 的源码: