Windows运维下调试pony程序
诗诗 2018-03-19 来源 :网络 阅读 1113 评论 0

摘要:本篇Windows运维将讲解pony程序调试这一知识点,看完这篇文章会让你对这个知识点有更加清晰的理解和运用。

本篇Windows运维将讲解pony程序调试这一知识点,看完这篇文章会让你对这个知识点有更加清晰的理解和运用。


pony在3年以前去掉了windows下调试信息生成,非常暴力:

#if defined(PLATFORM_IS_WINDOWS)

  opt.strip_debug = true;#endif

也就是固定去除调试信息选型。

但是我有主要使用Windows进行开发,这就很不方便了,于是尝试把这个选项去掉,然后加上CodeView信息生成(一共就改两行代码)。

再编译发现LLVM会出错:

Assertion failed: !isa<DIType>(Scope) && "shouldn't make a namespace scope for a type"

这错误说明在pony编译器里生成了不正确的信息,要改正必然要花很大功夫,只能另辟巧径:


修改pony编译器,开启CodeView和去掉strip_debug


pm->addModuleFlag(Module::Warning, "CodeView", 1);


编译pony程序时,输出LLVM ir


ponyc . -d -r=ir


用clang生成目标文件:


clang -c main.ll


用link进行链接


link /DEBUG advapi32.lib ws2_32.lib libponyrt.lib crypto.lib main.o


link的/DEBUG选型可以生成调试信息,然后就能用Visual Studio Debugger来调试了:

基本的断点、步进、查看变量都没问题,甚至能步进到pony的标准库和运行时。

但是还有些问题:


复杂的对象,缺少类型信息,就很难看出有用的信息,如果有Natvis就更加实用了


复杂的控制流程步进很很混乱,match、is语句支持不好


actor的behavior是异步调用,不能直接步进


希望这篇文章可以帮助到你。总之,同学们,你想要的职坐标IT频道都能找到!



本文由 @诗诗 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程