С Debugger.jl Джулии - Как я могу войти в режим отладки, подобный pdb.set_trace () или ipdb.set_trace () Python? - PullRequest
0 голосов
/ 21 мая 2019

Новый Debugger.jl Джулии великолепен, но довольно трудно добраться до того точного пункта кода, к которому я хочу иногда обращаться.

Есть ли способ, которым я могу войти в интерактивный режим отладки, подобный тому, что есть в Python в pdb.set_trace () или ipdb.set_trace ()? Например, я хотел бы иметь возможность вставить строку кода, где я хочу, чтобы отладчик запускался, например:

function myfunc(a, b)
     # do stuff
     set_trace() # interactive debug mode will start here
     # do other stuff
end

p.s. Я знаю, что это в основном похоже на установку точки останова в Юноне, но 1) я не всегда могу развиваться в Юноне; и 2) я не мог заставить точки останова работать хорошо с отладчиком Юноны даже после долгих попыток. Это может быть моей пользовательской ошибкой, но я уверен, что другие новички Джулии столкнутся с такими же проблемами и хотели бы решения, такого как pdb.set_trace ().

1 Ответ

1 голос
/ 21 мая 2019

Функция, которую вы ищете, удивительно лаконична:

@bp

Просто убедитесь, что вы загрузили пакет Debugger, чтобы вы могли его использовать:

using Debugger

Обратите внимание, что на самом деле он не остановится на точке останова, если вы запустите самую внешнюю функцию (например, myfunc) обычными методами. Вам нужно запустить его в режиме отладки, используя @enter или @run. Вот полный пример:

using Debugger
function myfunc(a, b)
     c = a + b
     @bp # interactive debug mode will start here
     c += 1
end

@run myfunc(42, 5)

(Juno иногда выдает странное поведение , когда вы запускаете строку @run ..., используя CTRL + ENTER. Возможно, лучше вместо этого скопировать и вставить эту конкретную строку непосредственно в REPL.)

@bp на самом деле это макрос, который является частью JuliaInterpreter.jl. Этот модуль имеет много других полезных функций для отладки - для получения более подробной информации см. документацию JuliaInterpreter .

...