Как вступить в код, который выполняется из PDB? [Дубликат]

Безголовый Chrome был отправлен в Chrome 59 Google Team , в котором был введен способ запуска браузера Chrome в Безглавой среде .

Была добавлена ​​заметка:

Headless mode has been available on Mac and Linux since Chrome 59. Windows support came in Chrome 60.

В статье Getting Started with Headless Chrome указано, что:

--disable-gpu \                # Temporarily needed if running on Windows.

Примечание был добавлен как:

В настоящий момент вы также захотите включить флаг --disable-gpu, если вы работаете в Windows.

blockquote>

обсуждение Headless: make --disable-gpu flag unnecessary было ясно, что:

Флаг --disable-gpu больше не нужен на Linux или Mac OSX . Это также станет ненужным для Windows, как только исправлена ​​ошибка SwiftShader fails an assert on Windows in headless mode .

blockquote>

Что произошло под капотом?

As за обсуждение headless: Switch from osmesa to SwiftShader , поскольку команда Google / Chromium решила отправить SwiftShader с Chrome, команда подумала начать использовать его для рендеринга GL-контента в режиме безголового . Для этого потребовалось несколько изменений:

  • Пропустить сбор данных GPU в режиме Безглавых , поскольку SwiftShader не считается программной реализацией этого кода, который приводит к сбою когда мы пытались получить информацию из Window System.
  • Пропустите инициализацию GL в InitializeStaticEGLInternal , если мы намереваемся использовать osmesa. SwiftShader требует инициализации, как и другие внепроцессные реализации.
  • В настоящее время SwiftShader не поддерживается на Mac OSX , поэтому команда решила продолжить использовать физический GPU в режиме безглавых на этой платформе (в отличие от других платформ, где все выдается программным обеспечением).
  • Таким образом, чтобы отключить поддержку WebGL в режиме Безголовый режим они решили использовать --disable-gpu и --disable-software-rasterizer

Идея Support WebGL in headless все еще обсуждается, но SwiftShader fails an assert on Windows in headless mode с ошибкой как:

[0117/125830.649194:ERROR:gpu_process_transport_factory.cc(1043)] Lost UI shared context.
DevTools listening on ws://127.0.0.1:37429/devtools/browser/1f0b2bf7-dfdd-44ac-9da7-f2659d352f0d

Заключение

Эта ошибка не влияет на ваш @Test, и пока вы можете игнорировать ошибку.

4
задан LeartS 16 January 2016 в 21:34
поделиться

2 ответа

Я думаю, что вы ищете команду (d)ebug, которая по некоторым причинам не указана в командах отладчика . Для справок в будущем pdb имеет хороший набор заданных команд (которые вы можете увидеть, набрав help в интерактивной подсказке). Включить команду debug:

(Pdb) help debug
debug code
        Enter a recursive debugger that steps through the code
        argument (which is an arbitrary expression or statement to be
        executed in the current environment).

Кажется, что вы делаете то, что вам нужно. Используя ваш образец сценария из терминала:

python -m pdb pdbscript.py

После выдачи двух команд n, чтобы функция была разобрана (я считаю, что это работает pdb). Вы можете выдать команду debug get_value_for_weekday(0) для рекурсивного шага в функции:

(Pdb) debug get_value_for_weekday(0)
ENTERING RECURSIVE DEBUGGER
> <string>(1)<module>()
((Pdb)) s
--Call--
> /home/jim/Desktop/pdbscript.py(3)get_value_for_weekday()
-> def get_value_for_weekday(weekday_index=None):
((Pdb)) n
> /home/jim/Desktop/pdbscript.py(4)get_value_for_weekday()
-> values = [10, 20, 20, 10, 30, 30, 30]
((Pdb)) n 
> /home/jim/Desktop/pdbscript.py(5)get_value_for_weekday()
-> if not weekday_index:
((Pdb)) p weekday_index
0
((Pdb)) n
> /home/jim/Desktop/pdbscript.py(7)get_value_for_weekday()
-> return sum(values) / 7

Обратите внимание, Я действительно отношусь к этой форме мета-отладки , но, похоже, быть тем, что вам нужно.

5
ответ дан Jim Fasarakis Hilliard 1 September 2018 в 05:44
поделиться

Что касается вашего примера, вам не нужно выходить из pdb и изменять код. Вы можете войти в функцию (с 's') и установить weekday_index = 0 внутри.

Одним из решений вашей исходной проблемы является использование команды перехода отладчика следующим образом:

  1. перед вызовом функции, используя шаг 'j # line-number'
  2. в функции с 's'
  3. , установите параметры ввода и продолжите отладку.

Это сработало, когда я попробовал, но отладчик жаловался, когда я попытался сделать шаг 3 до шага 2 по какой-то причине.

1
ответ дан Tomer Levinboim 1 September 2018 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: