【发布时间】:2010-07-06 17:51:06
【问题描述】:
我想知道人们使用什么方法来保证他们正在查看的源代码与他们正在调试的二进制文件相匹配。我是一个单独的开发人员,管理着相当大的代码集,我发现在调试应用程序时,我总是想确定生成错误的二进制文件是否与我正在查看的代码完全匹配。我构建了一个简单的应用程序来比较二进制文件,并想知道其他人是否正在使用这种方法,或者使用其他方法,如版本控制等。
【问题讨论】:
标签: visual-studio-2008 versioning
我想知道人们使用什么方法来保证他们正在查看的源代码与他们正在调试的二进制文件相匹配。我是一个单独的开发人员,管理着相当大的代码集,我发现在调试应用程序时,我总是想确定生成错误的二进制文件是否与我正在查看的代码完全匹配。我构建了一个简单的应用程序来比较二进制文件,并想知道其他人是否正在使用这种方法,或者使用其他方法,如版本控制等。
【问题讨论】:
标签: visual-studio-2008 versioning
Visual Studio 不为你做这件事吗?
每当您尝试加载二进制文件的符号/源代码时,VS 都会检查 pdb 文件(如果您想调试源代码而不仅仅是程序集,则需要该文件)是否与二进制文件匹配。不确定确切的机制,但它工作得很好:如果 pdb 不匹配,VS 拒绝加载,同样,如果源与二进制文件不匹配,VS 拒绝在源中设置断点。
编辑:另见选项->调试->常规:有一个选项要求源文件与原始版本完全匹配。选中后,VS 会在单步执行与二进制文件不完全匹配的源文件时发出警告。
根据评论进行编辑:虽然我看不出有十个可执行文件的充分理由,但这是我在项目中进行版本控制的方式;它可以用来做你要求的事情。
每个项目的 AssemblyInfo 仅包含描述、公司、...,以及包含示例的注释部分
//VERSION_MAJOR 2
//VERSION_MAJOR 1
(这些文件也被签入svn btw)
此外,每个项目中都有一个 AssemblyVersion.cs,再次包含一些注释掉的代码
//VERSION_BUILD 1223
//VERSION_QFE 10
还有实际的版本号,例如
[assembly: AssemblyFileVersion ( "2.1.1223.10" )]
(这些文件没有签入 svn,但我有一个简单的脚本可以在新签出后生成它们)
我的所有项目都导入一个具有公共属性的基础项目,其中一个预构建事件调用可执行文件,该可执行文件执行有趣的工作:它可以读取和写入 VERSION_XXX 数字以及 AssemblyFileVersion 字符串。预构建看起来像
<Exec Command="versioner -d$(ProjectDir) -f$(ProjectDir)Properties\AssemblyInfo.cs" />
它读取 AssemblyInfo.cs 以获取主版本号,读取 AssemblyVersion.cs 以获取其他编号,将 BUILD 设置为主项目目录的当前 svn 修订版,增加 QFE 编号并写回 AssemblyVersion.cs。递增数字是实现您想要的结果的关键:除非您溢出 QFE 编号,否则没有单个构建将具有相同的版本。
对于我使用的 C++
#define VERSION_MAJOR 2
等,它们被传递到一个资源文件中,该文件用数字填充 VERSIONINFO 部分。
因此,在您的情况下,在调试时,您会查看版本文件并将数字与二进制文件的版本进行比较。除此之外,您还必须检查每个单个源文件的最后修改日期不比版本文件的最后修改日期新,否则您仍然不确定。
【讨论】: