Как отладить расширение C ++ python? - PullRequest
1 голос
/ 04 марта 2020

Я хочу отладить библиотеку расширений C ++ python. В настоящее время библиотека выдает исключение, и чтобы выяснить, где я хочу использовать gdb . Проблема в том, что gdb не перехватывает стек исключений. Я сделал следующее:

$ gdb python3
(gdb) run script.py
UserWarning: An exception occurred: sort_index(): detected NaN

И когда я пытаюсь использовать backtrace:

(gdb) backtrace
No stack.

Я знаю, что такой возврат возможен, потому что я уже делал это раньше, вероятно, я чего-то не хватает Библиотека компилируется в режиме отладки.

1 Ответ

0 голосов
/ 13 марта 2020
Исключение

A Python не приведет к остановке GDB - оно знает только остановку на сигналах , а не на «обычной» частной обработке ошибок. Может быть возможно установить точку останова для функций Python, которые устанавливают индикатор ошибки Python, но они могут быть встроенными (или быть макросами).

Удобно, что вы можете установить «точку останова» для функции magi c, которая генерирует C ++ исключений - она ​​называется catchpoint и устанавливается со странным catch throw. (Это будет очень шумно, если (пойманные) исключения встречаются чаще, чем они должны быть в вашем коде!)

Наконец, обратите внимание, что вы никогда не сможете позволить исключению C ++ escape в Python - даже для того, чтобы поймать его в еще более широком контексте C ++, потому что Python не знает, как убирать в этих обстоятельствах.

...