我想扩展 Visual Studio 中使用的 C/C++ 编译器的功能。基本上,我想编写一个工具来解析 c/c++ 代码并打印出所有分支(if check、break 语句、for/while 循环等)在代码中发生的位置。然后,我想在执行代码时使用此信息来灰显给定测试用例尚未执行的代码区域。
可能吗?Microsoft 是否提供任何向其编译器/调试器添加功能的方法?
- 谢谢
我想扩展 Visual Studio 中使用的 C/C++ 编译器的功能。基本上,我想编写一个工具来解析 c/c++ 代码并打印出所有分支(if check、break 语句、for/while 循环等)在代码中发生的位置。然后,我想在执行代码时使用此信息来灰显给定测试用例尚未执行的代码区域。
可能吗?Microsoft 是否提供任何向其编译器/调试器添加功能的方法?
- 谢谢
使用预处理器来检测代码。代码在运行时应该吐出一个文件。在断点处,使用调试器 API + Visual Studio 插件机制处理此信息和“灰显”代码。
您通常不会通过修改编译器来做到这一点,而使用 Microsoft 的编译器则无论如何都无法做到这一点。相反,您将编写一个检测代码的预处理器(在条件节点处插入额外的代码以跟踪控制流),然后编写一个处理跟踪数据以确定运行的工具。
Visual Studio 本身有一个加载项体系结构,允许您以您描述的方式在编辑器中呈现此数据。
检测本身并不重要——它需要能够解析所有有效的 C 和 C++ 代码,并能够保留原始行号信息,以便呈现未检测的代码。为了完整起见,它必须能够使用三元 ?: 运算符重构代码,以便可以检测其流程。插桩代码还需要是标准预处理器输出的代码,而不是原始源代码——这使得行号跟踪更加困难(尽管预处理器已经管理了它以供调试器使用)。