摘要:本篇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频道都能找到!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号