如何:生成 C 和 C++ 代码的依赖项关系图
利用此 Visual Studio 2010 功能包,可以通过在 Visual Studio 2010 旗舰版中生成依赖项关系图来可视化 C 和 C++ 代码中的组织和关系。 使用这些关系图可帮助您浏览、了解和管理源代码中、二进制文件之间以及源文件和标头文件之间的依赖项。 例如,您能够可视化二进制文件、命名空间和类之间的依赖项。 关系图将代码元素及其关系表示为一组由链接或边缘连接的节点。 有关更多信息,请参见 Visual Studio 功能包。
重要事项 |
---|
您必须安装 Visual Studio 2010 功能包,才能使用此功能。 若要使用 Visual C 或 Visual C++ 项目执行此任务,则必须将 Visual C# 与 Visual Studio 一起安装。 |
当您为 C 和 C++ 代码生成关系图时,请注意以下项:
当您打开包含 C 和 C++ 项目的解决方案时,可能需要花时间更新 IntelliSense 浏览数据库。 在此期间,用于为源文件和标头文件生成依赖项关系图的命令将不可用。
提示
在为这些文件生成依赖项关系图之前请等待,直到 IntelliSense 数据库完成更新。 可在 Visual Studio 状态栏中监视这些更新的进度。 有关因禁用某些 IntelliSense 设置而导致出现的消息的更多信息,请参见疑难解答。
术语“程序集”在用户界面中意指“二进制”。 例如,若要查看解决方案中所有二进制文件之间的依赖项,请在**“体系结构”菜单上指向“生成依赖项关系图”,然后单击“按程序集”**。
提示
对于二进制文件,关系图仅显示二进制级别的依赖项。 例如,将不会显示相同二进制内的依赖项,例如方法调用和引用类型。
C 和 C++ 代码的生成的关系图文档的默认名称为“AssemblyDependenciesN.dgml”,其中,N 是文档的版本号。 可以随时重命名此文档。
可为整个 Visual Studio 解决方案或特定项生成依赖项关系图。
提示
如果您的解决方案非常大,则生成依赖项关系图可能需要花费一些时间来分析所有文件,否则会导致出现内存不足异常。 如果发生此情况,请减小解决方案的范围或使用体系结构资源管理器以在您生成关系图之前选择特定元素和关系。
使用相同的步骤为 C 和 C++ 代码生成依赖项关系图,如同您为 .NET 代码生成依赖项关系图一样。 有关更多信息,请参见如何:生成 .NET 代码的依赖项关系图。
有关在为 C 或 C++ 代码生成依赖项关系图时可能出现的问题的信息,请参见疑难解答。
查看源文件和标头文件之间的依赖项
可以可视化 C 和 C++ 源文件和标头文件之间的依赖项。 可选择依赖项的以下范围以进行可视化:
C++ 项目中的包含文件的依赖项关系图
解决方案中的所有源文件和标头文件
当前打开的文件以及所有第一级别源文件和标头文件
查看以下二者之间的依赖项 |
请执行这些步骤 |
---|---|
解决方案中的所有源文件和标头文件 |
在“体系结构”菜单上,指向“生成依赖项关系图”,然后单击“按包含的文件”[By Included File]。
注意
当您首次运行此命令时,Visual Studio 必须分析 C 或 C++ 项目文件。这可能需要一些时间。若要取消关系图生成,请在出现的消息框中单击“取消”。
|
当前打开的文件以及所有第一级别源文件和标头文件
提示
若要查看其他级别的依赖项,请使用关系图工具栏上的“邻居浏览模式”选择要查看的依赖项级别。有关更多信息,请参见如何:在关系图文档中浏览和导航。
|
|
带第一级别源文件和标头文件的标头文件的依赖项关系图
疑难解答
在为 C 或 C++ 代码生成依赖项关系图时,可能会出现以下问题:
问题 |
可能的原因 |
解决方法 |
---|---|---|
当您尝试从“体系结构”菜单中生成依赖项关系图时,Visual Studio 无响应。 |
程序数据库 (.pdb) 文件可能已损坏。 .pdb 文件将存储调试信息,例如,类型、方法和源文件信息。 有关更多信息,请参见程序数据库文件 (C++)。 |
重新生成解决方案,然后重试。 |
禁用 IntelliSense 浏览器数据库的某些设置。 |
Visual Studio 的“选项”对话框中可能已禁用某些 IntelliSense 设置。 |
打开设置以启用它们。 有关更多信息,请参见“选项”对话框 ->“文本编辑器”->“C/C++”->“高级”。 |
消息“未知方法”将出现在方法节点上。 由于无法解析方法的名称,导致出现此问题。 |
二进制文件可能没有基重定位表。 |
在链接器中打开 /FIXED:NO 选项。 有关更多信息,请参见 /FIXED(固定基址)。 |
仅支持在 x86 体系架构上运行的二进制文件。 |
||
无法生成程序数据库 (.pdb) 文件。 .pdb 文件将存储调试信息,例如,类型、方法和源文件信息。 有关更多信息,请参见程序数据库文件 (C++)。 |
在链接器中打开 /DEBUG 选项。 有关更多信息,请参见 /DEBUG(生成调试信息)。 |
|
无法在预期位置打开或找到 .pdb 文件。 |
确保 .pdb 文件位于预期位置。 |
|
已从 .pdb 文件中去除调试信息。 |
如果链接器中已使用 /PDBSTRIPED 选项,则改为包含完整的 .pdb 文件。 有关更多信息,请参见 /PDBSTRIPPED(去除私有符号)。 |
|
调用方不是函数,它是二进制文件中的形式转换 (thunk) 或数据节中的指针。 |
当调用方是形式转换 (thunk) 时,尝试使用 _declspec(dllimport) 以避免形式转换 (thunk)。 有关更多信息,请参见: |