首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为XBox开发者提供的ASan早期发布版本

本文来自XBox Advanced Technology Group (ATG)的首席软件工程师Tad Switf。

介绍

Address Sanitizer (ASan) 是一款用来查找难以追踪的内存相关Bug的利器。自从Visual Studio 16.9中的MSVC发布开始,我们一直和我们的合作伙伴一起并肩工作,目标是将ASan这个工具带到XBox平台。

随着最近发布的XBox六月GDK,我们很高兴地宣布:Address Sanitizer的早期发布版本正式可用。

在今天的这边文章中,我们将会展示如何在XBox平台上使用ASan工具。

使用Address Sanitizer进行编译

在XBox工程上配置ASan基本和PC版本一致,因为Address Sanitizer已经被集成进Visual Studio的调试工具集中了。但是,对于XBox开发者来说,还是会有一些特殊的场景是默认配置下的ASan所不能支持的。

现代游戏由高度复杂的多线程代码组成,其目标是在保持目标帧速率的同时尽可能快地运行。 这意味着,通过自动化构建和测试设置的全过程中,开发人员会经常需要测试自己的代码。 这些服务器可以构建代码,将其部署到控制台,并在没有调试器连接的情况下运行游戏,这意味着它们可能会错过调试输出中显示的任何ASan相关的错误报告。理想情况下,测试服务器可以从任何 Asan 错误中收集故障信息,但由于XBox GDK的差异,必须采取额外的步骤从自动运行中提取Address Sanitizer 的故障信息。

增强的调试支持

MSVC的ASan实现可以创建包含详细异常信息的故障转储,但这只能从XBox不支持的环境变量中启用。为了能够在XBox上获取故障转储,开发人员必须在其代码中指定一个函数来提供转储文件名。

以下是关于这个函数的两个例子:

关于这个函数的返回的名称,系统没有具体的要求,但它必须是运行代码的目标设备上的一个有效文件路径。

既然我们可以在Xbox上支持故障转储,我们还决定为开发人员提供更多的灵活性,来处理所产生的故障转储类型。

在某些情况下,简单的”分类”转储足以查看进程失败的调用堆栈,但在游戏中,通常需要在问题发生时查看更多内存地址空间里的数据。为此,我们提供了三种可配置的故障转储类型,它们受XBox平台支持,并且与开发人员期望从他们的XBox游戏机获得的故障转储相匹配。

请注意:与之前的功能一样,这个配置在XBox上是可选的,但如果你想使用故障转储来收集ASan信息而不附加调试器,则我们强烈建议你这样做。 如果你提供转储文件名但未提供转储类型配置,则它将无法在XBox上生成有效的故障转储文件。

此回调函数返回一个数字以指示所需的转储类型。有效类型列表,如下图所示:

这两个回调函数都可以在Visual Studio 16.9.8、16.10.2 或即将发布的16.11预览版中找到。

例子代码

下面的例子代码,演示了将这些函数添加到现有代码库中,我们可以根据需要进行调整,如下图所示:

请使用如下的命令进行编译:

这段代码在运行的时候,应该会抛出一个ASan异常,并产生我们上面函数指定的故障转储文件。

你可以将这些功能集成到现有代码中,并生成你需要的故障转储。

总结

Address Sanitizer现在可在XBox上使用了,开发人员可以利用这项强大的技术,来帮助调试游戏中的内存问题。

而对于内存相关的Bug,确实十分难以调试,所以,请善用ASan,让生活变得容易一些。

最后

Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新的开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。

本文来自:《Address Sanitizer Now in “Early Release” for Xbox Developers》

最近我写了个东西

正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。

我想:你值得拥有。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210702A0D66S00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券