Debug-Builds verwenden

Für die Entwicklungsarbeit am nativen Code in Ihrem Python-Paket möchten Sie möglicherweise einen Debug-Build verwenden. Um dies zu tun, müssen wir die Option -Dbuildtype=debug, die äquivalent zu -Ddebug=true -Doptimization=0 ist, an Meson setup übergeben. Darüber hinaus ist es wahrscheinlich am nützlichsten, einen editierbaren Build mit einem festen Build-Verzeichnis einzurichten. Auf diese Weise enthalten die gemeinsam genutzten Bibliotheken im installierten Debug-Build korrekte Pfade anstelle von Pfaden, die auf ein temporäres Build-Verzeichnis verweisen, das meson-python andernfalls verwenden würde. IDEs und andere Tools können dann während des Debugging korrekte Dateispeicherorte und Zeilennummern anzeigen.

Dies alles können wir mit dem folgenden pip Aufruf erledigen

$ pip install -e . --no-build-isolation \
    -Csetup-args=-Dbuildtype=debug \
    -Cbuild-dir=build-dbg

Dieser Debug-Build Ihres Pakets funktioniert mit einem regulären oder einem Debug-Build Ihres Python-Interpreters. Ein Debug-Python-Interpreter ist nicht zwingend erforderlich, kann aber nützlich sein. Er kann aus dem Quellcode kompiliert werden, oder Sie können ihn möglicherweise über Ihren Paketmanager Ihrer Wahl erhalten (typischerweise unter einem Paketnamen wie python-dbg). Beachten Sie, dass die Verwendung eines Debug-Python-Interpreters nicht zu einem Debug-Build Ihres eigenen Pakets führt – dafür müssen Sie -Dbuildtype=debug oder eine äquivalente Flag verwenden.

Warnung

Innerhalb einer Conda-Umgebung werden Umgebungsvariablen wie CFLAGS und CXXFLAGS normalerweise beim Aktivieren der Umgebung gesetzt. Diese Umgebungsvariablen enthalten Optimierungsflags wie -O2, die die durch -Dbuildtype=debug implizierte Optimierungsstufe überschreiben. Um dies zu vermeiden, unsetten Sie diese Variablen

$ unset CFLAGS
$ unset CXXFLAGS

Beachten Sie schließlich, dass die Änderung des Build-Typs von seinem Standardwert release auf debug auch dazu führt, dass meson-python Assertionen aktiviert (oder besser gesagt, nicht deaktiviert), indem das Makro NDEBUG nicht definiert wird (siehe b_ndebug unter Standard-Build-Optionen).