Как отследить причину внезапно появившегося незавершенного завершения программы, в то время как с помощью `strace` она завершается?

Вы не можете сделать это переносимо. POSIX spec не указал ни способа дампа определения функции, ни того, как функции реализуются.


В bash не обязательно экспортировать функцию в окружение, можно использовать:

declare -f funcname

(Работает в zsh)

Это работает, даже если вы запускаете bash в posix режиме:

$ bash --posix -c 'y(){ echo z; }; declare -f y'
y () 
{ 
    echo z
}

В ksh:

typeset -f funcname

(Работает в bash, zsh, mksh, pdksh, lksh)


В yash:

typeset -fp funcname

Это не сработает, если yash ввести в POSIXly-correct mode:

$ yash -o posixly-correct -c 'y() { ehco z; }; typeset -fp y'
yash: no such command `typeset'

С zsh:

print -rl -- $functions[funcname]
whence -f funcname
type -f funcname
which funcname

Обратите внимание, что оба whence -f, which, type -f сообщат о первом алиасе с тем же именем. Вы можете использовать -a, чтобы заставить zsh сообщить обо всех определениях.


Согласно POSIX, вам придется записывать определение функции самостоятельно, что можно сделать с помощью:

myfunction_code='myfunction() { echo Hello World; }'
eval "$myfunction_code"

или вспомогательной функции

defn() {
  code=$(cat)
  eval "${1}_code=\$code; $1() { $code; }"
}

defn myfunction << 'EOF'
echo Hello World
EOF

printf '%s\n' "$myfunction_code"

1
07.05.2019, 12:41
1 ответ

Как правило, это симптом какой-то ошибки в программном обеспечении каким-то образом, общего ответа дать нельзя.

Таким образом, это действительно специфично для ошибок в конкретном программном обеспечении, которое показывает такое поведение.

В случае с WWWOFFLE -прослушивание сетевого соединения между wwwoffleи wwwoffledпозволяет получить некоторую информацию.

0
28.01.2020, 00:12

Теги

Похожие вопросы