Как отладить цель 'java_binary', выполняемую правилом Базеля, через 'ctx.actions.run (...)'? - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть цель java_binary в моей рабочей области, которую я позже передаю как исполняемый файл ctx.actions.run внутри правила. Пока все хорошо.

Теперь я хочу отладить это java_binary, пока Базель выполняет правило. Чтобы подключить отладчик, мне нужно запустить java_binary в режиме отладки. Пока единственное, что я придумал, это установить jvm_flags на java_binary. Я смог заставить это работать. Но мне было интересно, если есть способ добиться этого из командной строки вместо того, чтобы запечь его в java_binary.

java_binary(
    ...
    jvm_flags = [
        "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000"
    ],
)

Можно ли добиться этого из командной строки без особых усилий? кодирование jvm_flags?

1 Ответ

0 голосов
/ 28 февраля 2020

Одна стратегия состоит в том, чтобы запустить сборку с --subcommands, которая скажет bazel распечатать все команды, которые он выполняет во время сборки. Затем найдите командную строку, соответствующую вызову java_binary, который вас интересует. Затем вы можете скопировать / вставить эту команду (включая часть cd) и изменить ее так, чтобы она включала флаги отладки, и отлаживать ее по мере необходимости. будет любой другой процесс.

Обратите также внимание, что java_binary выводит сценарий оболочки, который включает флаг --debug[=<port>], так что это должно быть все, что нужно добавить в командную строку.

Также обратите внимание, что --subcommands будет печатать только те команды, которые фактически выполняются во время сборки, поэтому полностью кэшированная / полностью инкрементная сборка ничего не печатает. Возможно, вам придется выполнить clean или удалить некоторые выходные данные интересующего вас действия, чтобы bazel выполнил эту команду.

...