CMake的保存剥离调试信息 – VoidCC

Q

CMake的保存剥离调试信息


2015-09-30


22 views



8 likes 

8

这是一个通常的做法编译与调试符号,然后使用objcopy的二进制分成释放可执行文件,并与调试信息的文件(然后换行到单独的包或存储符号服务器上)。CMake的保存剥离调试信息

如何调试符号在适当的CMake分开?我只看过一些讨论和不完整的代码示例。

平台是Linux和GCC。

来源


2015-09-30
Velkan

A

回答

2

CMake的不具有这种直接的支持,但你可以使用一些POST_BUILD和INSTALL步骤来实现你想要的结果。但是,值得注意的是,使用objcopy并不是做这种事情的唯一方法。你也可以使用build-id,这可能更容易用CMake来强大的实现。

这里有一个pretty good description of your choices and the methods,在几年前由Michael Hertling发布到CMake邮件列表中。我只是在这里挑选出可供选择的参考文献,但我建议阅读该链接。 GDB文档中还有更多的complete discussion of the two alternatives,这些文档应该填写关于这两种方法的剩余空白(调试链接与build-id)。下面是迈克尔的常规构建-ID的方法(集结号在他的例子明确给出,阅读引用的文章为它有望代表的解释):

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) 
PROJECT(BUILDID C) 
SET(CMAKE_VERBOSE_MAKEFILE ON) 
SET(BUILDID "abcdef1234") 
STRING(SUBSTRING "${BUILDID}" 0 2 BUILDIDPREFIX) 
STRING(SUBSTRING "${BUILDID}" 2 8 BUILDIDSUFFIX) 
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){return 0;}\n") 
ADD_EXECUTABLE(main main.c) 
SET_TARGET_PROPERTIES(main PROPERTIES 
    LINK_FLAGS "-Wl,--build-id=0x${BUILDID}") 
ADD_CUSTOM_COMMAND(TARGET main POST_BUILD 
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:main> 
            ${CMAKE_BINARY_DIR}/main.debug 
    COMMAND ${CMAKE_STRIP} -g $<TARGET_FILE:main>) 
INSTALL(FILES ${CMAKE_BINARY_DIR}/main.debug 
    DESTINATION ${CMAKE_BINARY_DIR}/.build-id/${BUILDIDPREFIX} 
    RENAME ${BUILDIDSUFFIX}.debug) 

配置与CMAKE_BUILD_TYPE ==调试并建立;随后,调用

GDB -EX“设置调试文件的目录。” -ex“文件主”

从CMAKE_BINARY_DIR中,您将按预期阅读“找不到调试符号 ”。现在,发出 “让安装”,再调用GDB,念道: “从… /读取符号构建-ID/AB/cdef1234.debug”

正如你所看到的,调试信息文件与剥离 可执行由构建ID仅连接;没有objcopy视线。

以上使用的事实是.debug文件预计是一个正常的可执行文件,调试信息不​​会被剥离。


来源


2015-11-23 20:59:54


相关问题

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    请登录后查看评论内容