Я использую переменную qmake VERSION в файле .pro, которая содержит номер версии из SVN. Его доступно QCoreApplication :: applicationVersion(), в моем каждом бункере по флагом --version.
Предполагая, что ваше приложение может получить достаточно далеко, чтобы распечатать его номер версии без дампа ядра, вы можете написать небольшую программу (питон, вероятно, будет проще всего), который вызывается с помощью дампа ядра. Программа будет читать stdin, выгружать его в файл, а затем переименовывать файл на основе номера версии.
От человека 5 ядра:
Piping core dumps to a program
Since kernel 2.6.19, Linux supports an alternate syntax for the
/proc/sys/kernel/core_pattern file. If the first character of this
file is a pipe symbol (|), then the remainder of the line is inter‐
preted as a program to be executed. Instead of being written to a disk
file, the core dump is given as standard input to the program. Note
the following points:
* The program must be specified using an absolute pathname (or a path‐
name relative to the root directory, /), and must immediately follow
the '|' character.
* The process created to run the program runs as user and group root.
* Command-line arguments can be supplied to the program (since Linux
2.6.24), delimited by white space (up to a total line length of 128
bytes).
* The command-line arguments can include any of the % specifiers
listed above. For example, to pass the PID of the process that is
being dumped, specify %p in an argument.
Если вы вызываете свой скрипт/USR/местные/бен/самосвал, затем
echo "| /usr/local/bin/dumper %E" > /proc/sys/kernel/core_pattern
Дампер должен скопировать STDIN в файл, а затем попытаться запустите программу, названную в ее командной строке, чтобы извлечь номер версии и использовать ее для переименования файла.
Что-то подобное может работать (я не пробовал, поэтому использовать в крайнем риске :)
#!/usr/bin/python
import sys,os,subprocess
from subprocess import check_output
CORE_FNAME="/tmp/core"
with open(CORE_FNAME,"f") as f:
while buf=sys.stdin.read(10000):
f.write(buf)
pname=sys.argv[1].replace('!','/')
out=subprocess.check_output([pname, "--version"])
version=out.split('\n')[0].split()[-1]
os.rename(CORE_FNAME, CORE_FNAME+version)
Действительно большой риск делать это рекурсивные основные отвалы, которые могут привести к сбою системы. Обязательно используйте ulimit, чтобы разрешать только отвалы ядра от процессов, которые могут распечатывать собственные версии без сброса ядра.
Было бы неплохо изменить сценарий для повторного запуска программы, чтобы получить информацию о версии только, если это программа, которую вы ожидаете.
Что такое бин версия? Вы сохраняете какую-то переменную где-то в исполняемом файле, который нужно извлечь, чтобы получить номер версии? – evaitl
Я использую переменную qmake VERSION в файле .pro, которая содержит номер версии из SVN. Его доступно QCoreApplication :: applicationVersion(), в моем каждом бункере по флагом --version. – portinary