`
iunknown
  • 浏览: 403990 次
社区版块
存档分类
最新评论

在二进制程序中留下对应源代码的版本号

    博客分类:
  • MISC
阅读更多
用 c/c++ 实现的一个库,在生产环境产生 bug 。由于上线过程没有详细的记录,因此不清楚生产环境所使用的库究竟对应什么版本的源代码。

在使用 svn 和 gcc 的情况下,可以用如下的方法,在二进制程序中留下对应的源代码的版本号

在源代码中增加一行,可以直接放到所有函数的最前面。
static const char resivion[] __attribute__((used)) = { "$Id: $" };


然后再对这个文件做如下的 svn 操作,令它生效
svn propset svn:keywords "Id" xxx.cpp


svn 有这个功能一早就知道,但是找了好久才终于令 gcc 把这段信息保留下来。关键点就在于那个 __attribute__((used)) ,否则 gcc 看到这个变量没人使用,会进行优化,从而去掉。

gcc attribute 的说明
http://gcc.gnu.org/onlinedocs/gcc-3.1.1/gcc/Variable-Attributes.html

svn 关键字替换的说明
http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.keywords.html
0
1
分享到:
评论
3 楼 iunknown 2010-04-30  
不错,多谢回复
2 楼 somebody 2010-04-29  
*.cpp = svn:keywords=Id Revision Date
1 楼 somebody 2010-04-29  
其实还可以自动添加 propset


http://jdkcn.com/entry/how-to-add-auto-props-in-subversion.html

你需要再添加一行就可以了。
*.java = svn:keywords=Id Revision Date

相关推荐

    Visual Studio.Net(VS) 源码管理器

    项目在SourceSafe中以二进制码形式将文件的所有版本信息保存在文件中。要在服务器上创建一个目录,将项目文件映射到这个目录中,使用该命令。在"Set shadow folder for project"中选择在SourceSafe中的SourceManager...

    virboxprotector_2.0版免费试用版-支持APK加固

    采用整体和混合加固保护,并对核心逻辑代码进行虚拟化保护,有效防止攻击者使用逆向分析工具将二进制代码反编译为伪代码。 防篡改 在应用启动时,对内存进行完整性校验,可以有效防止文件补丁、恶意代码植入、二次...

    IIS6.0 IIS,互联网信息服务

    三、在Windows XP Home版本中添加IIS的方法一般情况下按照“一”的方法只适用于Windows XP的专业版本,而对于家庭版,如今已有了破解方法:步骤1 首先我们需要准备一张Windows 2000的安装光盘,假设你的Windows XP...

    BatchApkTool375.7z

    在实用程序路径和正在处理的文件名中,避免长路径、特殊字符(感叹号!,利息、马车等)和俄语字母。 1.脱氧: 1.1将固件/系统文件夹的所有内容放入实用程序的\u系统文件夹中。您可以直接从设备上合并文件,请参阅...

    vld(Visual Leak Detector 内存泄露检测工具 源码)

    所以尽可以将其头文件一直包含在你的源代码中。  Visual Leak Detector工作原理  下面让我们来看一下该工具的工作原理。  在这之前,我们先来看一下Visual C++内置的内存泄漏检测工具是如何工作的。Visual C++...

    DBX260中文说明书

    要选择一个厂家程序,(处于程序模式),用数据轮旋钮在各种厂家程序中滚动,这是一种选择的方法,因为每滚动至一个厂家程序,都会清楚地显示出其路径矩阵及所有被用程序能达到的效果。一旦选中一个程序,就按压数据轮...

    Git权威指南PDF完整版

    3.2.1 以二进制发布包的方式安装/ 26 3.2.2 安装 Xcode/ 27 3.2.3 使用 Homebrew 安装 Git/ 29 3.2.4 从Git源码进行安装/ 29 3.2.5 命令补齐/ 30 3.2.6 其他辅助工具的安装/ 30 3.2.7 中文支持/ 31 3.3 在Windows 下...

    华为编程开发规范与案例

    近日在CDB并行测试中发现一个问题:我们需要的小区负荷话统结果总是为零,开始还以为小区负荷太小,于是加大短消息下发数量,但还为零,于是在程序中加入测试代码,把收到的数据在BAM上打印出来, 结果打印出来的...

    入门学习Linux常用必会60个命令实例详解doc/txt

    上面代码中,第一行是Linux发行版本号,第二行是内核版本号和登录的虚拟控制台,我们在第三行输入登录名,按“Enter”键在Password后输入账户密码,即可登录系统。出于安全考虑,输入账户密码时字符不会在屏幕上回显...

    Ghost 8.3 系统备份软件

    选择菜单Local→Disk→To Disk,在弹出的窗口中选择源硬盘(第一个硬盘),然后选择要复制到的目标硬盘(第二个硬盘)。注意,可以设置目标硬盘各个分区的大小,Ghost 可以自动对目标硬盘按设定的分区数值进行分区和...

    Linux操作系统基础教程

    Linux 是在 1991 年发展起来的与 UNIX兼容的操作系统,可以免费使用,它的源代码 可以自由传播且可任人修改、充实、发展,开发者的初衷是要共同创造一个完美、理想并 可以免费使用的操作系统。 我们并不能使同学...

    新版Android开发教程.rar

    � 由于是源代码开放的产品,对非主导厂商而言,可以避开与主导厂商在核心技术上面的差距,开发出 更 具竞争力和差异化的产品。 对运营商的影响 � 丰富的数据业务,将导致数据流量的显著增加 。 � 手机来源增加,...

    java-servlet-api.doc

    一个Servlet只能运行在一个Servlet环境中,但是不同的Servlet可以在Servlet引擎上有不同的视图。 如果Servlet引擎支持虚拟主机,每个虚拟主机有一个Servlet环境。一个Servlet环境不能在虚拟主机之间共享。 Servlet...

    网管教程 从入门到精通软件篇.txt

    INP:Oracle 3.0版或早期版本的表单源代码 INRS:INRS远程通信声频 INS:InstallShield安装脚本;X-Internet签字文件;Ensoniq EPS字簇设备;Cell/ⅡMAC/PC抽样设备 INT:中间代码,当一个源程序经过语法检查后...

    Oracle9i的init.ora参数中文说明

    正常情况下, WHERE 子句中进行的比较是二进制的, 但语言比较则需要 NLSSORT 函数。可以使用 NLS_COMP 指定必须根据NLS_SORT 会话参数进行语言比较。 值范围: Oracle8i National Language Support Guide 中指定的...

    Ghost 8.3 Enterprise

    选择菜单Local→Disk→To Disk,在弹出的窗口中选择源硬盘(第一个硬盘),然后选择要复制到的目标硬盘(第二个硬盘)。注意,可以设置目标硬盘各个分区的大小,Ghost 可以自动对目标硬盘按设定的分区数值进行分区和...

    EXCEL集成工具箱V6.0

    【屏幕取色】 经典的屏幕取色工具,可取任意一处屏幕颜色到指定的存储格中,可显示为RGB颜色值或十六进制的颜色值,为VBA开发人员的辅助工具之一。 【万年日历】 可以查询所有节、假日信息和公农双历,以及计算两...

    Linux高级bash编程

    对于二进制文件的一个grep替换 10-8. 列出系统上的所有用户 10-9. 在目录的所有文件中查找源字串 10-10. 列出目录中所有的符号连接文件 10-11. 将目录中的符号连接文件名保存到一个文件中 10-12. 一个C风格的for...

    Advanced Bash-Scripting Guide <>

    对于二进制文件的一个grep 替换 10-8. 列出系统上的所有用户 10-9. 在目录的所有文件中查找源字串 10-10. 列出目录中所有的符号连接文件 10-11. 将目录中的符号连接文件名保存到一个文件中 10-12. 一个C 风格的for ...

Global site tag (gtag.js) - Google Analytics