perf
инструмент пространства пользователя как некорневойПолучите/найдите источники для kernel-2.6.36-gentoo-r4 (в хинду Linux). Первая проверка из этого ответа
На самом деле сначала необходимо посмотреть на
/usr/src/linux
и посмотрите, установлены ли источники ядра все еще. Вы могли просто скопировать их в каталог, в который можно записать.)
был достаточно, хотя вместо того, чтобы копировать целые источники ядра я просто связал их:
$ mkdir -p build
$ cd build
$ ln -s /usr/src/linux-2.6.36-gentoo-r4
Создайте каталог где perf
был бы создан, поскольку я не смогу записать в ~/build/linux-2.6.36-gentoo-r4
каталог.
$ mkdir -p perf
На самом деле это не было тем, от чего я сделал сначала... сообщения об ошибках make
были совершенно бесполезны сначала.
Перейдите в tools/perf
каталог в источниках ядра
$ cd linux-2.6.36-gentoo-r4/tools/perf
Сборка perf
, не упущение о передаче O=
опция к make-файлу как каталог не перезаписываема (не было бы такой проблемы, если бы я скопировал, а не symlinked источники ядра).
$ make O=~/build/perf -k
Makefile:565: newt not found, disables TUI support. Please install newt-devel or libnewt-dev
* new build flags or prefix
CC ~/build/perf/perf.o
CC ~/build/perf/builtin-annotate.o
[...]
CC ~/build/perf/util/scripting-engines/trace-event-python.o
CC ~/build/perf/scripts/python/Perf-Trace-Util/Context.o
AR ~/build/perf/libperf.a
LINK ~/build/perf/perf
~/build/perf/libperf.a(trace-event-perl.o): In function `define_flag_value':
~/build/linux-2.6.36-gentoo-r4/tools/perf/util/scripting-engines/trace-event-perl.c:127: undefined reference to `PL_stack_sp'
~/build/linux-2.6.36-gentoo-r4/tools/perf/util/scripting-engines/trace-event-perl.c:131: undefined reference to `Perl_push_scope'
[...]
~/build/perf/libperf.a(trace-event-python.o): In function `handler_call_die':
~/build/linux-2.6.36-gentoo-r4/tools/perf/util/scripting-engines/trace-event-python.c:53: undefined reference to `PyErr_Print'
[...]
collect2: ld returned 1 exit status
make: *** [/home/narebski/build/perf/perf] Error 1
GEN perf-archive
make: Target `all' not remade because of errors.
Google для "неопределенной ссылки на 'Perl_push_scope'". Найдите, что Сбой устанавливает перфект на slackware 13.1 на unix.stackexchange.com. Последуйте совету в сам ответ, или быть большим количеством экс-кошки диагноз:
$ make O=~/build/perf -k NO_LIBPERL=1 NO_LIBPYTHON=1
Makefile:565: newt not found, disables TUI support. Please install newt-devel or libnewt-dev
* new build flags or prefix
CC ~/build/perf/perf.o
CC ~/build/perf/builtin-annotate.o
[...]
CC ~/build/perf/util/probe-finder.o
AR ~/build/perf/libperf.a
LINK ~/build/perf/perf
GEN perf-archive
Обратите внимание, что это - обходное решение, а не решение (я имею libperl.so
).
Проверьте Make-файл на место назначения установки по умолчанию: $(HOME)
. Установка perf
в собственном корневом каталоге:
$ make O=~/build/perf -k NO_LIBPERL=1 NO_LIBPYTHON=1 install
Makefile:565: newt not found, disables TUI support. Please install newt-devel or libnewt-dev
GEN perf-archive
install -d -m 755 '~/bin'
install ~/build/perf/perf '~/bin'
[...]
install scripts/python/bin/* -t '~/libexec/perf-core/scripts/python/bin'
Проверьте это ~/bin
находится в ПУТИ
Проверьте это perf
работы правильно (не забывают к CD в перезаписываемом каталоге):
$ cd
$ perf record -f -- sleep 10
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.001 MB perf.data (~61 samples) ]
Вывод немного редактируется, заменяя мой корневой каталог с ~
.
Да, это - ожидаемое поведение. Когда только один аргумент передается test
, проверка длины выполнена. От man bash
:
тест и [оценивает условные выражения с помощью ряда правил на основе количества аргументов.
0 аргументов: выражение является ложью.
1 аргумент: выражение верно, если и только если аргумент не является нулевым.
Таким образом, по существу это - эквивалент test foo
, но использование -n
как строка.
test -n
на первый взгляд уродливо, с тех пор -n
требует аргумента. Я полагаю, что некоторые исторические реализации рассматривали его как синтаксическую ошибку (и возвратил ненулевое состояние). Однако во всех оболочках Вы, вероятно, встретитесь в 21-м веке, поведение четко определено (POSIX, следуя существующей практике): если test
имеет только один аргумент, затем это верно, если и только если тот аргумент непуст.
Обратите внимание, что при игнорировании кавычек тест может закончить тем, что был ложью для некоторых непустых значений $VAR
. Это может даже распечатать сообщение об ошибке, если существуют globbing символы в $VAR
.
VAR='foo -a -z bar'; test -n $VAR || echo "true... and false is false"
VAR='= n-'; test -n $VAR || echo "this is an equality test"
VAR='*'; test -n $VAR || echo "you may or may not see this depending on what files are in the current directory"
test -z $VAR
так же повреждается.
Ksh, удар и zsh имеют a [[ … ]]
условная конструкция, которая подражает традиционному test
и [
утилиты. В отличие от этого, [
, который или является внешней утилитой или является встроенным, которое анализируется как один, [[ … ]]
часть синтаксиса оболочки. Нет никакого разделения слова или globbing внутри [[ … ]]
. [[ -n $VAR ]]
прекрасен (как долго, поскольку Вы не заботитесь, что Ваши сценарии не будут работать под другими оболочками, такими как пепел).
Проверьте также [[ ... ]]
, который не переносит это поведение:
[[ -n $VAR ]] && echo wrong 3
[[ -n "$VAR" ]] && echo wrong 4
[[ ... ]]
не то же как [ ... ]
который действительно показывает то же поведение как test
и функция, упомянутая в man bash
... В [[ ... ]]
переменная не должна быть "$quoted", который будет распознан переменная (т.е. как аргумент к [[
)... Это сводится к простому случаю: переменная не была заключена в кавычки, и это должно было быть.
– Peter.O
27.01.2012, 16:32
Начиная со здания удара test
, и /usr/bin/test
приведите к тому же результату, я говорю да, это - ожидаемое поведение.
Кажется, когда Вы делаете следующее:
VAR=
test -n $VAR && echo helloworld
Это рассматривает его, как будто аргумент не там:
test -n && echo helloworld
И, по некоторым причинам, когда аргумент не предоставляется, он всегда выполняет команду впоследствии (т.е. он отображает helloworld). Я попробовал это на другом unuary операторе, и он сделал то же самое:
FILENAME=
test -f $FILENAME && echo helloworld
Я думаю, хотите ли Вы ожидать поведение, необходимо заключить аргумент в кавычки:
VAR=
test -n "$VAR" && echo helloworld
FILE=
test -f "$FILE" && echo helloworld
Вышеупомянутые урожаи никакое сообщение, отзывающееся эхом на экран.
Относительно этого ожидаемое поведение? Я не могу найти его в документации нигде, но, это кажется довольно восстанавливаемым и последовательным.