是否可以将当前提交的SHA添加到核心文件模式?

时间:2018-08-26 19:10:39

标签: linux git coredump

我正在将git sha添加到核心文件模式中,以便我确切地知道用于生成核心文件的提交。 有办法吗?

1 个答案:

答案 0 :(得分:0)

我不清楚您所说的“核心文件模式”是什么意思。 (特别是,当进程崩溃且Linux内核生成核心转储时,它将使用kernel.core_pattern。此设置是系统范围的,而不是每个进程的。设置方法可以运行辅助程序,请参见{{ 3}}-但这只能使您走到目前;您仍然必须编写该程序。另请参见How to change core pattern only for a particular application?。)但是这里有一个普遍的问题,它有一些棘手的解决方案,所有这些都是a的变体。很明显的方法,仍然有点聪明。

一般问题

直到完成提交之后,您才知道要提交的提交的哈希。更糟糕的是,即使您可以计算出要提交的提交的哈希值,也可以这样做,这很困难,但是如果您更改要提交到提交中的某些提交文件的内容,为了包含此哈希,您更改所做的提交的内容 ,这意味着您将获得不同的实际提交哈希。

简而言之,不可能在提交内部提交提交的提交哈希。

hacky解决方案

通常的想法是编写一个在构建过程中使用的未跟踪文件,以使二进制文件包含提交哈希值很容易找到。对于使用Make构建的项目,请参见https://wiki.ubuntu.com/Apport了解一些方法。

构建tarball时可以使用相同的方法。 Git可以使用 ident 过滤器将文件(blob对象)的哈希ID嵌入工作树文件中,但这是< em> file ,通常没有用。因此,相反,如果使用git archive来生成tar或zip文件,则可以使用export-subst,如how to include git commit-number into a c++ executable?中所述和the gitattributes documentation中所指。请注意,tar或zip存档也直接保存提交哈希ID。

最后,您可以编写自己的自定义污迹过滤器,将提交哈希ID嵌入到工作树文件中。在没有等效的外部 make 进程运行以生成二进制文件的语言中,这可能很有用。这里的问题是,当污迹过滤器读取HEAD时,它会被设置为git checkout完成之前的 值,而不是它被设置为之后的完成。这使得提取正确的提交哈希ID变得非常困难(如果有正确的提交哈希ID,请注意,git describe会在指向后附加-dirty,以指示工作树与HEAD提交(如果适用)。