当前位置: 首页 > news >正文

企业网站制作公司合肥网站开发 html

企业网站制作公司合肥,网站开发 html,淘宝网店运营策划方案,红色页面网站在 C 程序开发过程中,调试是一个非常重要的环节。当程序出现问题,尤其是在生产环境中出现崩溃并生成 Core 文件时,我们需要使用调试工具(如 GDB)对程序进行深入分析,找出问题的根源。为了在需要时能够有效地…

在 C++ 程序开发过程中,调试是一个非常重要的环节。当程序出现问题,尤其是在生产环境中出现崩溃并生成 Core 文件时,我们需要使用调试工具(如 GDB)对程序进行深入分析,找出问题的根源。为了在需要时能够有效地使用 GDB 进行调试,我们需要一种方法来在编译过程中巧妙地处理调试信息,既能保证最终程序的高效运行,又能在需要时方便地使用调试信息进行故障排查。这就涉及到如何在编译过程中分离和保留调试信息,同时确保 GDB 可以使用这些信息对 Core 文件进行调试。

一、使用 Makefile 实现

DEBUG_FILE = $(TARGET).debug
$(TARGET): $(OBJECTS)$(CC) $(LDFLAGS) $(LIBPATH) -Wl,--start-group $(OBJECTS) $(LIBS) -Wl,--end-group -o $@$(objcopy) --only-keep-debug $(TARGET) $(DEBUG_FILE)$(STRIP) $(TARGET)$(objcopy) --add-gnu-debuglink=$(DEBUG_FILE) $(TARGET)

$(objcopy) --only-keep-debug $(TARGET) $(DEBUG_FILE)
使用 objcopy 工具将 $(TARGET) 中的调试信息提取出来,并存储在 $(DEBUG_FILE) 中。
--only-keep-debug 选项表示只保留调试信息,将其分离出来存储在单独的文件中。这样做的好处是可以减小最终可执行文件的大小,同时保留调试信息以便后续调试。

$(STRIP) $(TARGET)
使用 strip 工具从 $(TARGET) 中去除调试信息和符号表等内容。这样可以减小可执行文件的大小,使其更适合在生产环境中使用,因为这些信息在运行时通常是不需要的。

$(objcopy) --add-gnu-debuglink=$(DEBUG_FILE) $(TARGET)
再次使用 objcopy 工具将调试信息文件 $(DEBUG_FILE) 以 GNU 调试链接的方式添加到 $(TARGET) 中。这样,调试器可以在需要时找到并使用存储在 $(DEBUG_FILE) 中的调试信息,即使这些信息已经从 $(TARGET) 中剥离。这是一种常见的做法,既可以使最终的可执行文件更小,又能在需要调试时仍然可以使用调试信息。

二、使用 CMakeLists.txt 实现


set(DEBUG_FILE ${PROJECT_NAME}.debug)add_custom_command(TARGET ${PROJECT_NAME}POST_BUILDCOMMAND ${OBJCOPY} --only-keep-debug $<TARGET_FILE:${PROJECT_NAME}> ${DEBUG_FILE}COMMENT "Creating debug file ${DEBUG_FILE} from ${PROJECT_NAME}"
)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILDCOMMAND ${CMAKE_STRIP} "$<TARGET_FILE:${PROJECT_NAME}>"COMMENT "Strip debug symbols done on final binary."
)
add_custom_command(TARGET ${PROJECT_NAME}POST_BUILDCOMMAND ${OBJCOPY} --add-gnu-debuglink=${DEBUG_FILE} $<TARGET_FILE:${PROJECT_NAME}>COMMENT "Adding GNU debug link to ${PROJECT_NAME}"
)

2.1 添加自定义命令:分离并存储调试信息:

add_custom_command(TARGET ${PROJECT_NAME}POST_BUILDCOMMAND ${OBJCOPY} --only-keep-debug $<TARGET_FILE:${PROJECT_NAME}> ${DEBUG_FILE}COMMENT "Creating debug file ${DEBUG_FILE} from ${PROJECT_NAME}"
)

add_custom_command:这是 CMake 中的一个函数,用于添加自定义的构建命令。
TARGET ${PROJECT_NAME}:表示这个自定义命令将作用于 ${PROJECT_NAME} 这个目标。
POST_BUILD:指定该命令将在构建 ${PROJECT_NAME} 目标之后执行。

COMMAND ${OBJCOPY} --only-keep-debug $<TARGET_FILE:${PROJECT_NAME}> ${DEBUG_FILE}:
${OBJCOPY} 是一个工具,用于操作对象文件。
--only-keep-debug 是 OBJCOPY 的一个选项,用于从 PROJECT_NAME(使用生成器表达式来获取 ${PROJECT_NAME} 目标的最终文件)中仅提取并保留调试信息。
最终将提取出的调试信息存储在 ${DEBUG_FILE} 中。

2.2 添加自定义命令:去除最终二进制文件中的调试信息:

add_custom_command(TARGET ${PROJECT_NAME} POST_BUILDCOMMAND ${CMAKE_STRIP} "$<TARGET_FILE:${PROJECT_NAME}>"COMMENT "Strip debug symbols done on final binary."
)

${CMAKE_STRIP} 是 CMake 中用于调用 strip 工具的变量。

该命令使用 strip 工具从最终的二进制文件中去除调试信息和符号表,以减小最终二进制文件的大小。

2.3 添加自定义命令:添加 GNU 调试链接:

add_custom_command(TARGET ${PROJECT_NAME}POST_BUILDCOMMAND ${OBJCOPY} --add-gnu-debuglink=${DEBUG_FILE} $<TARGET_FILE:${PROJECT_NAME}>COMMENT "Adding GNU debug link to ${PROJECT_NAME}"
)

COMMAND ${OBJCOPY} --add-gnu-debuglink=${DEBUG_FILE} $<TARGET_FILE:${PROJECT_NAME}>:
再次使用 OBJCOPY 工具,--add-gnu-debuglink=${DEBUG_FILE} 选项将之前存储在 ${DEBUG_FILE} 中的调试信息以 GNU 调试链接的方式添加到最终的二进制文件中。

这样做的好处是既减小了最终二进制文件的大小,又在需要时可以通过该链接使用存储在 ${DEBUG_FILE} 中的调试信息进行调试。

三、实际使用

假如可执行文件是hello
把hello,hello.core,hello.debug放在一个目录,用以下命令,可以自动使用调试文件

gdb hello hello.core
bt //查看堆栈信息
http://www.yayakq.cn/news/878734/

相关文章:

  • 建一个小型的购物网站服务器一年要多少钱优秀网站制作定制
  • 网站开发的学习方法网页设置背景颜色
  • 模板网站五金商城系统app开发
  • 济南精品建站外包公司价格怀化优化生育政策
  • 黄浦网站制作夜猫直播视频下载
  • 可以免费建设网站网页升级访问紧急通通知
  • 简单建设网站首页公司网站如何更改内容
  • 云主机怎样做网站保定seo企业网站
  • 金融公司网站 html网站开发原型工具
  • 装饰公司网站源码百度推广账号登录
  • 重庆建新建设工程有限公司网站工商营业执照查询网
  • 扫码支付个人商城网站开发免费天元建设集团有限公司公章图片
  • 自助式网站建设 济南微信android平板版
  • 中国人寿寿险保险公司官方网站金华网站制作企业
  • 大学生50个创新产品设计佛山网站seo哪家好
  • 青岛网站设计报价推荐自助建网站平台
  • 做网站需要源码广州冼村街道办事处电话
  • 台州手机端建站模板紫光华宇拼音输入法官方下载
  • 网站建设教程软件下载公司做网站 分录
  • 建设银行的英语网站首页平面设计接单的网站
  • 公司网站制作费用多少视觉设计工作室
  • 江苏省招标投标信息网榆林网站seo
  • 做的很好的画册网站公司网站过期未续费会怎样
  • 网络建站工作室官网源码哪些网站适合瀑布流
  • 网站程序 制作建筑工程教育网
  • 江苏常州青之峰做网站网站开发的系统设计怎么写
  • 网站设计排行南京协会网站建设
  • 天津公司网站建设费江苏推广网站建设业务
  • 网站换空间 site办公室设计图片
  • 织梦网站程序模板wordpress 列表页模板