erlang vm debug 调试编译
2017-05-09 11:52
337 查看
1. download source code
tar -xzvf otp_src-18.3.tar.gz
2. cd /root/source/otp_src_18.3
3. export ERL_TOP=`pwd`
4. cd $ERL_TOP/erts/emulator
5. make TYPE=debug smp plain (这里和官网的文档不一样,用官网的生成结果不正确)
6. $ERL_TOP/bin/cerl -debug
$ERL_TOP/bin/cerl -debug -gdb (emacs环境)
$ERL_TOP/bin/cerl -debug -rgdb (纯gdb环境) 用gdb调试一下nif吧 1. ./cerl -debug -rgdb -s tu init 运行起来调试器 2. b twiddle_nif 出现: Function "twiddle_nif" not defined. Make breakpoint pending on future shared library load? y 回车。 3. tu:twiddle({{3,4},5}). 4. 进入了动态库的调试了。 Breakpoint 1, twiddle_nif (env=0x7ffff2d3add0, argc=1, argv=0x7ffff6448280) at tu.cpp:20 20 auto tup_in = make_tuple( make_tuple(ref(a), ref(b)), ref(c) ); 5. l 看看源代码: static ERL_NIF_TERM twiddle_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) 16 { 17 try 18 { 19 int a,b,c; 20 auto tup_in = make_tuple( make_tuple(ref(a), ref(b)), ref(c) ); 21 nifpp::get_throws(env, argv[0], tup_in); 22 return nifpp::make(env, make_tuple( c, make_tuple(b, a))); 23 } 24 catch(nifpp::badarg) {} 成功了,这样就可以调试nif 的so了。
参考:
https://gist.github.com/studzien/773baa48a432e70021c2
https://gist.github.com/gburd/4157112/5650f7718b05a4b518b91e4bab172e4f4a290141
相关文章推荐
- Vss2008 项目调试编译并继续功能(Debug 同时修改代码功能)(已解决)
- 只编译一个模块的debug信息,调试此模块
- 使用gcc -g编译,gdb调试时仍然存在“no debug symbols found”的错误
- Java虚拟机原理分析之Win10下VS2017编译OpenJDK8与单步调试HotSpot VM过程详细记录
- iOS 宏编译debug调试
- 汇编语言DosBox下在64位上运行实现编译(masm)与调试即debug命令。
- [Debug]在VS中编译调试C程序
- Eclipse怎么在线安装JD-Eclipse反编译插件(JD插件Debug调试显示参数值)?
- MT6573 Android在Eclipse中Debug方式分两种,一种是编译模拟器,在模拟器的基础上进行调试,还有一种是通过真机remote debug。
- 使用gcc -g编译,gdb调试时仍然存在“no debug symbols found”的错误
- Unity Mac下编译工具以及调试安卓输出Debug日志
- vs2010编译调试live555之2-debug的exe找不到媒体文件
- 重新编译JDK的src.zip=>rt_debug.jar,使调试可以进入系统类审查变量
- Erlang shell debug调试
- iOS 宏编译debug调试
- Ionic 介绍、安装、配置、项目不同平台编译、DeBug调试经验总结
- Java虚拟机原理分析之Win7下VS2010编译OpenJDK8与单步调试HotSpot VM过程详细记录
- smplayer-16.7.0源码 32位Debug版编译、运行、调试
- debug编译时错误问题解决一法
- LINUX下汇编的编译,调试命令