2016-07-11 29 views
6

Niedawno natrafiłem na this project. Kod jest w dużej mierze napisany w języku C, a interfejs API składa się tylko z kilku funkcji języka C. Niestety projekt wydaje się zawierać pewne błędy, w szczególności ciągle dostaję "podwójne darmowe lub korupcyjne" błędy. Próbuję użyć valgrind i gdb, aby dowiedzieć się, co jest nie tak. Problem wydaje się być w alokatorze pamięci. Niestety, pierwszy błąd valgrind występuje w około 400-liniowym makrze preprocesora zdefiniowanym w nagłówku. Niestety gdb nie może złamać generowanego kodu. Śledzenie stosu również nie jest zbyt użyteczne. Czy istnieje jakaś technika, która może być wykorzystana do radzenia sobie z takimi błędami?Jak debugować makro preprocesora

+3

Gdyby mnie? Konwertuj makro na funkcję inline. Jeśli projekt naprawdę tak bardzo ich używa (a to nie odstraszyło mnie od używania kodu), mógłbym spróbować przetworzyć wstępnie plik, a następnie skompilować i debugować ten plik. –

+6

400 + linie makro Oo! Spróbuj wygenerować źródło c po przebiegu preprocesora (opcja gcc -E) i ustaw punkty przerwania w tym pliku. – Picodev

+0

Cóż, one definiują ogólną kolejkę priorytetową "the C way" :( – hfhc2

Odpowiedz

1

Internetowy kompilator Wandbox.org ma tryb "CPP", który jest bardzo przydatny do eksperymentowania z preprocesorem C.

Zobacz przykład tutaj: https://wandbox.org/permlink/tFUsKMIXaQj8hhte

Można zrobić to samo w trybie offline, z gcc -P lub cl.exe /E