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
6
A
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
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. –
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
Cóż, one definiują ogólną kolejkę priorytetową "the C way" :( – hfhc2