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