LINUX.ORG.RU

Отладка cython

 , , ,


0

4

Это вопрос тем, кто разрабатывает модуль (модули) для питона на cython. Т.е. есть какой-то бэкенд на сишке (сишная либа, в моем случае жёсткая проприетарщина), и cython служит клеем между чисто питоном и чисто сишкой.

Как вы отлаживаете это? Я уже предвосхищаю ответы в стиле " отладчик не нужен, все проблемы решаются автоматизированными тестами, и вообще у нас TDD и сюрпризов не бывает, всё сустейнабл и грин". Оставим в покое такую разработку. Допустим, вам попал в руки модуль, разработанный не вами, и он как-то странно себя ведёт, не то и не так в сишной либе вызывает.

В таком случае, вы будете:

  1. Залезать в кишки модуля и лепить какой-то быстро сварганенный логгинг в файл или

  2. Будете настраивать gdb (ведь со своим самопальным логгером возможно придется кучу кода обложить логами) по мануалу типа https://cython.readthedocs.io/en/latest/src/userguide/debugging.html ?

★★★★★

Последнее исправление: seiken (всего исправлений: 2)
Ответ на: комментарий от beastie

Ха! Если бы всё было так просто, то не было бы темы в Development. Но на практике ведётся тонкая корпоративная игра, в которой надо чтобы наша команда обладала всем ноу-хау, а не только тот, кто эту либу разработал. Это всё, естественно, оффтопик для данной темы, поэтому и не стал об этом писать сразу.

seiken ★★★★★
() автор топика

В таком случае, вы будете:

Поскольку как именно «странно себя ведёт» — не описано, то буду cмотреть по ситуации. Вариантов — миллион. Например, взять frida.re и обвесить инструментацией сишную либу в рантайме. Ну или да, настраивать gdb. В конце–концов, примитивный как палка способ — накидать свою сишную либу–прокладку с такими же экспортами как у оригинала и в ней уже реализовать хуки, где смотреть, что именно и как дёргается.

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

anonymous
()
Ответ на: комментарий от Obezyan

GDB вот буду мучить. На счёт IDA Pro - это слишком тяжёлая артиллерия. На самом деле, структура интерфейса проприетарной либы нам известна, надо только выяснить, почему конкретная функция вызывается два раза. Т.е. теоретически можно даже написать фейковую обёртку на С над этой любой, которая будет тупо форвардить вызовы API уже проприетарной либе, но даже это слишком геморройно для задачи.

seiken ★★★★★
() автор топика
Последнее исправление: seiken (всего исправлений: 1)
Ответ на: комментарий от seiken

Т.е. теоретически можно даже написать фейковую обёртку на С над этой любой, которая будет тупо форвардить вызовы API уже проприетарной либе, но даже это слишком геморройно для задачи.

Я где-то видел штуку, позволяющую автоматически генерировать такие обёртки, но не помню, как называется. Ещё есть ltrace, но с ним не всё так гладко, как может показаться по описанию

annulen ★★★★★
()

Вскод умеет отлаживать и пистон и сишку. Собираешь inline, ставишь брейк в пистоне, тормозишь на нем, потом в сишке. Не слишком удобно но жить можно

upcFrost ★★★★★
()

кста ко подсказывает что

в свежих(очередная известн_где_боль для легаси) версиях вроде как профилировщик можно онлайново подключать к едующим экземплярам -

так что брякать «pdb» и плевать стейтами в лог можно и без правки испытуемого модуля - да и его сырцов ибо в худшем случае траса будет гранулированна на уровне байткода

qulinxao3 ★☆
()

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

anonymous
()

Я всегда начинаю отладку с разбрасывания отладочных print-ов в стратегических местах, и только если это после 10-20 итераций не помогло, запускаю gdb.

Chiffchaff
()