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

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

    博客分类:
  • 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

相关推荐

    Tcpdump 下载[二进制文件,直接执行,无需安装]

    "二进制"指的是这个软件已经由源代码编译成可以直接运行的机器码,对应的操作系统和架构可以直接识别并执行。对于不同的操作系统(如Linux、Windows、macOS等)和处理器架构(如x86、x86_64、ARM等),可能存在不同...

    报文传输中的进制转换(十六进制、二进制)

    十六进制则扩展到16个符号(0-9及A-F),它是二进制的一种便捷表示,每四位二进制对应一位十六进制数,简化了数据的读取和处理。 在报文传输中,数据通常需要从十进制转换为二进制或十六进制,以便于计算机理解和...

    使用C编译器产生清晰的二进制文件

    输出结果可能不同,但只要显示版本号即表示已正确安装。 4. **其他工具**:还需要安装binutils和Netwide Assembler (NASM)。binutils用于处理目标文件,而NASM则是一个强大的汇编器,支持多种目标文件格式,如Linux...

    编写计算机程序,从IP数据报头中抽出源地址和目的地址,将它们以点分十进制表示输出。

    头部包含了一些重要的信息,如版本号、头部长度、服务类型、总长度、标识符、标志、片段偏移、生存时间(TTL)、协议类型、头部校验和、源IP地址以及目标IP地址等。 #### 点分十进制表示法 点分十进制是一种常用的...

    小颖Java源代码反编译专家

    "小颖Java源代码反编译专家 V1.4终极版.exe"这个文件名表明,这可能是一个Windows操作系统的应用程序,其版本号为V1.4,且被标记为“终极版”,可能意味着它具有更全面的功能或优化。反编译器通常会包含以下功能: ...

    小颖 java源代码反编译专家

    1. **字节码解析**:反编译器首先需要解析.class文件的二进制格式,包括魔数、版本号、常量池、访问标志、类索引、接口索引等关键部分。 2. **指令映射**:Java字节码由一系列单字节的操作码组成,每个操作码对应一...

    szzh.rar_szzh6240_进制转换

    "szzh6240"可能是这个工具或程序的特定版本号。 在计算机系统中,数据通常以二进制的形式存储和处理,因为二进制只有两个状态,0和1,非常适合电子设备处理。然而,人们日常生活和工作中更习惯于使用十进制,因为它...

    SEGD文件读取C++源代码

    总之,通过学习这段"SEGD文件读取C++源代码",你可以掌握如何处理二进制文件、解析特定格式的数据以及在C++中进行地震数据处理的基础知识。这对于进入地震编程领域,或者进一步研究地球物理数据处理技术都是一个很好...

    protobuf 的源码 版本2.5.0

    - protoc解析.proto文件,生成对应编程语言的消息类源代码。 - 用户在代码中使用生成的消息类进行序列化和反序列化操作。 - 序列化时,protobuf会根据Descriptor中的信息将消息对象转换成二进制流。 - 反序列化...

    支持AM29LV160的BIOS源代码

    另一个文件“FS44B0II_BIOS”可能就是AM29LV160 BIOS的源代码或者编译后的二进制文件,对应恒丰44B0 V4.0板。如果是源代码,它可能包含C语言或汇编语言编写的各种函数和模块,如内存初始化、设备检测、中断处理等。...

    代号、标记和细分版本号  _  Android 开源项目  _  Android Open Source Project1

    在Android操作系统的发展过程中,代号、标记和细分版本号是重要的版本管理方式,它们帮助开发者理解和追踪Android系统的变化。这些命名规则不仅具有趣味性(如使用各种甜点名称),还包含丰富的技术信息。 首先,...

    vc编写的二维条码算法源代码

    在给定的标题“vc编写的二维条码算法源代码”中,我们可以推断这是一份使用C++编程语言(VC通常指的是Visual C++)实现的二维条形码生成与解析的源代码。这种源代码可能包含了对二维条形码格式的理解,如PDF417、QR ...

    ffmpeg(aarch64)源代码

    版本号 "N-92407-gfd1d735" 是FFmpeg的一个开发版本,表示它是在主线分支的第92407次提交后的某个版本,gfd1d735是Git的SHA1哈希值,用于标识具体的代码版本。这通常意味着该版本包含了最新的功能和改进,但可能还...

    sbcl_bin:目的是为roswell分发sbcl二进制文件

    1. **不同平台的二进制文件**:这些文件对应于 SBCL 的不同操作系统和处理器架构版本,例如 `sbcl-x86_64-linux-gnu.tar.bz2` 对应于 64 位 Linux 平台的 SBCL。 2. **配置脚本和辅助文件**:可能包含用于 Roswell ...

    android游戏 源代码

    【标题】"Android游戏源代码"揭示了这个压缩包中包含的是一个Android平台上的游戏应用程序的开发源码。Android作为谷歌公司推出的开源移动操作系统,以其开放性和灵活性吸引了大量的开发者进行游戏开发。源代码是...

    TCP客户端、服务器端源代码图片传输QT版本

    在QT中,可以利用QByteArray或QDataStream类来处理二进制数据,确保图片数据能完整无损地传输。 总的来说,这个项目提供了一个实用的示例,展示了如何利用QT库和TCP协议进行图片的可靠传输。对于开发者来说,深入...

    编译原理词法分析源代码

    在编程领域,编译原理是理解计算机语言处理过程的关键部分,它涉及到将高级语言转换为机器可执行的二进制代码。词法分析是编译器设计中的第一步,它是从源代码文本中识别出有意义的、称为“词法单元”或“标记”的小...

    代码生成器源代码

    通常,这种命名方式表示版本控制的构建号,其中"bin"表明这是可执行的二进制文件,可能包含Java的JAR文件或者其他语言的可执行文件。 在代码生成器的设计中,常见的技术包括: 1. **数据库连接管理**:使用JDBC...

    CentOS简介.pdf

    CentOS 的发展历史可以追溯到 RHEL 的源代码,RHEL 在发行的时候,有两种方式:二进制的发行方式和源代码的发行方式。CentOS 就是将 RHEL 的源代码重新编译一次,形成一个可使用的二进制版本。由于 LINUX 的源代码是...

    最新版Notepad++十六进制查看的插件x64HexEditor0.9.12

    在日常使用中,x64HexEditor可以帮助程序员调试程序,检查内存中的原始数据,或者分析二进制文件的结构。例如,当需要查看文件头信息、检查二进制数据中的特定字节序列,或者进行低级别的数据操作时,这个插件就显得...

Global site tag (gtag.js) - Google Analytics