Сбой R произошел из-за ошибки сегментации, т. Е. Вы пытались получить доступ к памяти, к которой у вас нет доступа. Обычно это происходит, когда вы пытаетесь получить доступ к элементу n+1
вектора, который имеет только элементы n
, или когда вы плохо используете указатели. Чтобы определить неочевидный сегмент (но не только), я всегда использую Valgrind. Напишите минимальный код R, который генерирует segfault. Затем запустите его из терминала.
R -d "valgrind --tool=memcheck --leak-check=full" --vanilla -f test.R
Для установки valgrind в GNU / Linux sudo apt-get install valgrind
. Valgrind не существует в Windows.
Используйте ctags. Генерируйте файл тегов и скажите энергию, где она использует: команда тегов. Тогда можно просто перейти к функциональному определению с помощью Ctrl - ]
, Там больше приемов тегов и подсказок в этот вопрос .
Если все содержится в одном файле, существует команда gd
(как в 'goto определение'), который возьмет Вас к первому вхождению в файле слова под курсором, который часто является определением.
Поскольку Paul Tomblin упомянул, что необходимо использовать ctags. Вы могли также рассмотреть использование , плагины для выбора адаптируют один или предварительно просматривать определение функции под курсором. Без плагинов Вы будете страдать от головной боли, пытающейся выбрать одну из сотен перегруженных 'doAction' методов, как создано в поддержке ctags, не берет в учетной записи контекст - просто имя.
Также можно использовать , cscope и его 'находит глобальный символ' функцией. Но Ваша энергия должна быть скомпилирована с поддержкой +cscope, которая не является значением по умолчанию одна опция сборки.
, Если Вы знаете, что функция определяется в текущем файле, можно использовать нажатия клавиш 'gD' в нормальном режиме для перехода к определению символа под курсором.
Вот наиболее загруженный плагин для навигации
, http://www.vim.org/scripts/script.php?script_id=273
Вот является тем, который я записал для выбора контекста в то время как переход для меток
http://www.vim.org/scripts/script.php?script_id=2507
Другая общая техника состоит в том, чтобы поместить имя функции в первый столбец. Это позволяет определению быть найденным с простым поиском.
int
main(int argc, char *argv[])
{
...
}
вышеупомянутая функция могла тогда быть найдена с /^main
внутренняя часть файл или с :grep -r '^main' *.c
в каталоге. Пока код правильно форматируется единственное время, идентификатор произойдет в начале строки, в функциональном определении.
, Конечно, если Вы не используете ctags с этого момента, необходимо стыдиться себя! Однако я нахожу этот стандарт кодирования полезным дополнением также.
К ответу второго Paul: да, ctags (особенно избыточный-ctags ( http://ctags.sourceforge.net/ )) является большим. Я также добавил это к своему vimrc, таким образом, я могу использовать, каждый отмечает файл для всего проекта:
set tags=tags;/