public

Dbg And Dbgsym

linux/debug/dbg_and_dbgsym.md

Concept Flow

Concept flow

11. -dbg 包(手动创建,旧方法)
22. -dbgsym 包(自动生成,新方法,推荐)
33. 选择 -dbg 还是 -dbgsym?
44. 你应该怎么做?

-dbg-dbgsym 都是用于提供 调试符号(debug symbols) 的,但它们的机制和用途有所不同:


1. -dbg 包(手动创建,旧方法)

示例(debian/control 中的 -dbg 定义):

Package: libdzsisai-dbg
Architecture: any
Section: debug
Priority: extra
Depends: libdzsisai (= ${binary:Version}), ${misc:Depends}
Description: debugging symbols for libdzsisai

2. -dbgsym 包(自动生成,新方法,推荐)

使用 -dbgsym 方式的 debian/rules 示例:

export DEB_BUILD_MAINT_OPTIONS = hardening=+all debug
override_dh_strip:
	dh_strip --dbgsym-migration='libdzsisai-dbg (<< 1.2.3-1~)'

这样,libdzsisai-dbg 旧包会被 libdzsisai-dbgsym 取代,而不影响用户升级。


3. 选择 -dbg 还是 -dbgsym

方式-dbg(旧方法)-dbgsym(新方法,推荐)
维护方式手动 添加 debian/control 里定义的 -dbg自动dh_strip --dbgsym-migration 生成
生成方式dh_strip --dbg-package=xxx-dbgdh_strip --dbgsym-migration=xxx-dbg
安装方式apt install xxx-dbgapt install xxx-dbgsym(需启用 ddebs 仓库)
存储位置/usr/lib/debug//usr/lib/debug/.build-id/
适用情况适用于老旧包适用于现代 Debian/Ubuntu 包
推荐使用不推荐推荐

4. 你应该怎么做?

如果你在维护 Debian 包,推荐迁移到 -dbgsym,因为它更简单且自动化。

你目前的 git diff 显示:

  1. 删除了 -dbgdebian/control 里删掉了 libdzsisai-dbg)。
  2. debian/rules 里开启了 debug(可能影响 CFLAGS)。

👉 下一步建议


总结

想简化维护?-dbgsym,它是 Debian/Ubuntu 现代推荐方式
还在维护老旧 Debian 包? 那才需要 -dbg,但一般不建议新项目用
只想本地调试? export DEB_CFLAGS_MAINT_APPEND=-g 即可,不用 -dbg-dbgsym

你是想用 -dbgsym 方式,还是只是想让 dpkg-buildpackage 生成带 -g 的调试信息?