2016-07-11 7 views
6

Ich bin kürzlich auf this project. Der Code ist weitgehend in C geschrieben und die API besteht aus nur wenigen C-Funktionen. Leider scheint das Projekt einige Bugs zu enthalten, insbesondere bekomme ich immer wieder "doppelte freie oder korrupte" Fehler. Ich versuche Valgrind und Gdb zu verwenden, um herauszufinden, was falsch ist. Das Problem scheint im Speicherzuordner zu liegen. Leider tritt der erste Valgrind-Fehler in einem etwa 400 Zeilen langen Präprozessor-Makro auf, das in einem Header definiert ist. Leider kann gdb den generierten Code nicht unterbrechen. Die Stapelverfolgung ist auch nicht sehr nützlich. Gibt es eine Technik, die verwendet werden kann, um mit solchen Fehlern umzugehen?Wie debugge ich ein Präprozessor-Makro

+3

Wenn es nach mir ginge? Konvertieren Sie das Makro in eine Inline-Funktion. Wenn das Projekt sie wirklich ausgiebig benutzt (und das hat mich nicht davor abgeschreckt, den Code zu verwenden), könnte ich versuchen, eine Vorverarbeitung zu einer Datei durchzuführen und dann diese Datei zu kompilieren und zu debuggen. –

+6

400 + Linien Makro Oo! Versuchen Sie, die c-Quelle nach dem Präprozessor-Durchlauf (gcc -E-Option) zu generieren und Haltepunkte in dieser Datei zu setzen. – Picodev

+0

Nun, sie definieren eine generische Prioritätswarteschlange "the C way" :( – hfhc2

Antwort

1

Der Online-Compiler Wandbox.org hat einen "CPP" -Modus, der sehr nützlich ist, um mit dem C-Präprozessor zu experimentieren.

ein Beispiel Siehe hier: https://wandbox.org/permlink/tFUsKMIXaQj8hhte

Sie können die gleiche Sache offline tun, mit gcc -P oder cl.exe /E