暴雪团队使用VS进行Linux平台崩溃分析蝎子简介说说我们的调试工作流程总结最后
原标题:暴雪团队使用VS进行Linux平台崩溃分析
蝎子暴雪正在使用VisualStudio2019在WSL上对Linux平台上发生的崩溃进行分析 。 本文来自暴雪高级软件工程师BillRandolph , 目前他负责暗黑破坏神4的开发工作 。 感谢Bill给我们带来这次技术分享 。 
文章图片
简介在暗黑4的开发中 , 我们主要是在Windows平台进行代码开发 , 然后我们会将代码编译到多个目标平台 。 这些平台中包括我们的Linux服务器 。 (当然 , 如各位所想到的 , 在代码中我们添加了一系列条件编译以及必要的平台相关代码)
【暴雪团队使用VS进行Linux平台崩溃分析蝎子简介说说我们的调试工作流程总结最后】我们使用这种工作方式有很多原因 。 第一个 , 就是我们团队的核心优势是在Windows平台 , 甚至我们的服务器开发工程师也大部分对Windows平台开发比较擅长 。 我们认为 , 团队中所有的工程师能使用比较常用的开发工具集和知识库是非常有帮助的 。
我们选择在Windows作为开发平台的另一个原因是VisualStudio所提供的强大功能和丰富的工具集和 。 而在Linux世界里 , 并没有一个可以与之抗衡的集成开发环境 , 即使我们之前也曾在Linux平台上做代码开发 。
然而 , 这个开发模式也存在一些问题 。 例如 , 当我们部署在Linux上的程序发生崩溃时 , 我们希望能有一种方法可以对崩溃转储进行调试 , 看看到底发生了什么事情 。
可以想到的一种方法是:远程登录到发生崩溃的服务器上 , 然后执行GDB调试器来进行崩溃分析 。 但是这种方法有很多缺陷 , 第一是我们并不希望在目标服务器上部署源代码 , 所以如果没有源代码 , GDB就很难分析出什么有意义的东西 。
另一个原因就是GDB调试器本身:除非工程师经常使用GDB , 否则新手工程师就很难熟练地使用GDB进行代码调试 , 而我们的工程师都比较喜欢使用简单易用的调试工具 , 同时他们也十分熟悉这些工具 。 因为我们开发团队只有2到3名工程师对GDB比较熟悉 , 所以实际上也只有他们能有效地的调试产品崩溃问题 , 这对于我们来说 , 实在是不太高效 。
一直以来 , 我们都在寻找一种更加简单的方式来在Linux服务器上调试代码 。 我们很高兴地发现:我们能够利用新的VisualStudio功能 , 使我们能够在熟悉的开发环境中进行简单方便的调试!
毫不夸张地说 , 这真是:梦想成真啊 。 
文章图片
说说我们的调试工作流程只有在安装了WSL或者在ConnectionManager中添加了Linux连接之后 , 你才可以在VisualStudio中调试Linux程序 。 我们开发团队的每个人都安装了WSL , 使用的发行版本是我们即将实际部署的版本 。 我编写了一个脚本 , 可以用来在WSL里一键安装所有用于构建服务器程序的开发工具和支持库 。
(另外我还想强调的一点是 , 我们发现WSL是开发者用来验证代码改动的最佳Linux环境 。 非常神奇的一个地方是 , 开发者可以直接进入WSL环境中的共享文件夹 , 然后就可以直接进行代码构建了 。 这比使用虚拟机或者容器 , 实在是强太多了 。 如果你正在使用CMake工具 , 那你也可以使用VisualStudio中对于WSL的原生支持)
下面我里提供一些有关我们构建的背景信息吧 。 我们在Windows上开发代码 , 并使用了一台可以在Windows下运行的Windows版本代码 。 这对于正常功能开发很有用 。 但是 , 我们在Linux上部署服务器 , 这需要在Linux本身上构建代码 。 Linux版本是在构建服务器场上生成的 , 该构建服务器场使用Linux机器上的构建系统来构建服务器及其要部署的容器 。 Linux可执行文件仅部署在容器中 , 开发人员通常无权对其进行访问 。
当服务器在我们的基础架构中崩溃时 , 持续集成流程会通知我们 , 并将核心转储文件存档到网络共享文件夹中 。 要在Linux或VisualStudio中调试代码崩溃 , 必须具有正在运行的可执行文件 。 它还有助于调试已部署容器上使用的对应的共享库 。 我们使用另一个脚本来获取这些文件 。 首先 , 我们将内核复制到本地计算机 , 然后运行脚本并将其指向内核 。 该脚本会下载使用该版本构建的Docker容器 , 从中提取服务器二进制文件 , 以及某些共享的运行时库供GDB使用 。 (这避免了WSL版本与部署的Linux版本不完全匹配时可能遇到的GDB兼容性问题 。 )脚本将写入~/.gdbinit , 以将共享库设置为调试会话的系统库 。
- 王者荣耀:适合五虎上将五排开黑使用的头像
- 备用金|经常支取支付宝备用金影响借呗额度吗?那是肯定的,但要正确使用
- 屏幕真的是升级?红米K40对比小米10和红米K30至尊,结果纠结了!手机屏幕成为关键看点好的屏幕在使用过程中会非常舒服红米K30至尊版跟不上节奏红米K
- 《GTA5》使用大表哥2的引擎之后?画质瞬间提升档次?这是游戏?
- T1.Teddy:频繁轮换很难进行团队配合,大家都有压力
- 基耶萨:今天的胜利是团队的功劳 我们会为了冠军战斗到最后一刻
- 胖女孩的减肥式造型,使用连衣裙遮挡“赘肉”,展现苗条身材
- 神仙友情!毛加恩宣布妻子生子,孩子名字使用“高以翔”元素
- 护肤品的神仙搭配组合,比单一使用功效更好,你都了解吗
- 我的世界:最全的钻石攻略和使用效果,看完后还怕不懂“钻石”?
