Как установить точку останова для функции python в gdb

Я когда-нибудь использовал gdb для отладки сценариев python (конечно, CPython). Обычно бывает полезно отлаживать базовые дампы (и когда они связаны с c-модулями расширения).

Основной вопрос заключается в том, как установить точку останова на функцию python в gdb. Скажем, у меня есть скрипт python с функцией foo, и я хочу разбить сразу после вызова foo. Я полагаю, что установка условной точки останова на PyEval_EvalFrameEx может работать, но не уверен, как это сделать.

5
nl ja de

2 ответы

Используя предложенную технику, это работает (хотя это не очень):

break PyEval_EvalFrameEx if (strcmp((((PyStringObject *)(f->f_code->co_name))->ob_sval), "foo") == 0)

Here, f is a PyFrameObject. You may also want to check f->f_code->co_filename to make sure you've got the right file. Note that this does slow down the program quite a bit, since you're breaking and comparing a lot.

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

1
добавлено

Используя предложенную технику, это работает (хотя это не очень):

break PyEval_EvalFrameEx if (strcmp((((PyStringObject *)(f->f_code->co_name))->ob_sval), "foo") == 0)

Here, f is a PyFrameObject. You may also want to check f->f_code->co_filename to make sure you've got the right file. Note that this does slow down the program quite a bit, since you're breaking and comparing a lot.

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

1
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community