Невозможно просмотреть ввод пользователя при отладке ввода CQL в Cassandra

1

У вас есть некоторые проблемы с попыткой отладки программы, которую я использую, и задался вопросом, может ли кто-нибудь помочь мне.

В текущей среде я запускаю Cassandra (v2), используя cqlsh (v3), который поставляется вместе с ней. Я вношу изменения в некоторые из его функциональных возможностей, а затем с помощью cqlsh проверять команды, чтобы увидеть, работают ли мои изменения в соответствии с назначением, или, если не так, как выглядит вход при прохождении программы. Я запускаю сеанс отладки (либо в затмении IntelJ, ни на что не имеет значения), запуская код сервера для приема соединений/ввода. Затем я загружаю cqlsh и задаю пространство ключей, которое я хочу использовать. Кажется, это работает нормально. Затем я выполняю строку cql для проверки моих изменений через командную строку. То, что я ожидаю увидеть, - это запись в командной строке, которая улавливается отладчиком в моей среде IDE, где я вижу, как ввод обрабатывается моими изменениями кода. То, что я вижу, ничего не происходит вообще, как будто никакая команда не была представлена.

Поэтому мои вопросы будут следующими:

1) Должен ли я видеть что-либо в моей среде отладки при выполнении команд, как описано выше? 2) Если нет, как бы вы отлаживали серверное приложение, имеющее эту конфигурацию, особенно в области обработки ввода пользователя? 3) Если да, то какие параметры следует проверить, чтобы проверить, правильно ли я настроен, или какие процессы следует выполнять для просмотра и отладки указанных представлений?

Я полагаю, что должен быть лучший способ, чтобы иметь 50 000 System.out.println() повсюду (при условии, что они даже работают), или, по крайней мере, я надеюсь, что есть.

Спасибо всем, кто читает это. Любые вопросы (которые, я уверен, могут быть, так как я, вероятно, не использую правильные дескрипторы), пожалуйста, спросите прочь.

Теги:
cassandra
procedure
debugging
cqlsh

1 ответ

2
Лучший ответ

У меня был успех в следующем подходе.

  1. Обязательно выполните компиляцию с -g (используйте как: javac -g), чтобы включить генерацию всей отладочной информации.
  2. При запуске приложения используйте соответствующие флажки отладки (например, java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1414, номер - это порт, к java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1414 вы подключаетесь), чтобы запустить сервер отладки. Обратите внимание, что вы можете отлаживать удаленный хост (отладчик будет подключаться с использованием имени hostname: port syntax). Вам не нужно вводить все это для Cassandra; вы можете просто раскомментировать соответствующую строку в cassandra-env.sh (в Windows, посмотреть в bin/Cassandra.bat или запустить Datastax distro в разделе реестра HKLM\SOFTWARE\[optionally Wow6432Node\]Apache Software Foundation\[Procrun node]\[Cassandra node]\Parameters\Java:Options).
  3. Подключайтесь к своему серверу из вашей IDE (я использовал Eclipse, IntelJ похож, я уверен).
  4. Откройте исходный код в среде IDE и поместите некоторые точки останова, которые будут воспроизводиться в вашем прецеденте.
  5. Запустите свой сценарий. Ваши контрольные точки должны ударить. Для определенного подтверждения того, что установка работает, поставьте точку останова на то, что гарантировано будет выполнено во время вашего сценария, а не на то, что вы считаете.

В вашем случае, поскольку вы можете успешно определить пространство ключей, я считаю, что все работает, а затем происходит молчащий сбой при попытке сделать другие шаги, возможно, внесенные вашими изменениями. Чтобы подтвердить, я бы рекомендовал отменить все ваши изменения и сначала проверить настройку отладчика на чистой сборке.

Наконец, и это может быть излишним, CQLSH - это программа, написанная на Python, и выполняется отдельно от Cassandra в другом процессе. Поэтому вы не можете увидеть фактическую "запись в командной строке" из отладчика Java. Ближе всего вы можете добраться до вашего исходного ввода, поставив точки останова где-нибудь в пакете cql3, чтобы увидеть, что инструкции CQL передаются (надеюсь). Конечно, вы можете использовать отладчик Python для отладки CQLSH, если это то, что вы хотите.

  • 0
    Ну ладно, по какой-то причине я понял, что cqlsh передаст указанную строку в cassandra для обработки, и я мог видеть эту строку, или, по крайней мере, если не всю, то некоторые или результат ее выполнения. Если это неправильно, это объясняет, почему я получаю результаты, которые не соответствуют ожидаемым.
  • 0
    Cqlsh довольно существенен: более 2K строк кода, поэтому он самостоятельно выполняет большую часть обработки ввода, хотя большинство команд пересылаются в Cassandra. Хорошим практическим правилом является то, что если вы вводите «оператор CQL», он передается в Cassandra, а если это «команда CQLSH», он обрабатывается внутри скрипта Python.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню