gpt4 book ai didi

c++ - 用于验证 Visual Studio 一致性开关对生成代码的影响的工具

转载 作者:行者123 更新时间:2023-11-30 03:21:33 26 4
gpt4 key购买 nike

最近的次要版本 Visual Studio (15.7) 实现了编译器开关/permissive-,除其他效果外,它还支持模板的两阶段名称查找 (https://learn.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance)。我想在我们大约 400 万行代码的代码库上启用此开关。问题是,如果启用此开关,实例化的模板可能会更改(请参阅 https://blogs.msdn.microsoft.com/vcblog/2017/09/11/two-phase-name-lookup-support-comes-to-msvc/ 中的第一个示例),这会导致运行时行为发生静默更改。

有没有办法检查启用此一致性开关后生成的代码是否与旧代码相同?

我知道正确答案是“你运行你的单元测试,呃!”。遗憾的是,遗留代码数量众多,这在未来几年内是遥不可及的,所以我正在寻找替代方案。

对二进制文件进行比较没有帮助,因为由于元数据更改而存在差异。新的编译错误实际上也没有任何帮助:它们只会暴露不一致的语法;生成的代码中的更改仍然可以隐藏。实际上看到生成的代码并不重要。显示“此行将以不同方式编译”的工具就足够了。或者类似于“预处理到文件”对预处理器所做的事情。

我能想到的最好的方法是通过 dumpbin 工具在每个 .obj 文件上检查生成的符号,看看是否生成了相同的符号。这只会暴露一部分问题:文件中的模板实例集可能相同,但它们在代码中的位置可能会发生变化。

最佳答案

您可以分析编译器输出(在汇编级别)以检查您提到的 2 个编译器设置所产生的差异。

请看这个related SO question关于 Visual C++ 编译器。

此外,更适合相对较小的代码部分,
你可能想使用奇妙的 GodBolt's Compiler Explorer ,
它执行相同的任务,但具有方便的 Web 界面并扩展到各种编译器(不仅是 Microsoft Visual C++)。
我相信它会成为开发人员工具集中最有值(value)的工具之一。

关于c++ - 用于验证 Visual Studio 一致性开关对生成代码的影响的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52043528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com