Zależy, i to ogólnie dotyczy wszystkich narzędzi, nie tylko C30.
Optymalizacje często usuwają i / lub zmieniają kod na różne sposoby. Instrukcja switch może zostać ponownie zaimplementowana za pomocą konstrukcji if / else lub w niektórych przypadkach może zostać usunięta razem. y = x * 16 może zostać zastąpione szeregiem przesunięć w lewo itp., chociaż ten ostatni rodzaj optymalizacji można zwykle przeforsować, przeważnie jest to zmiana instrukcji sterującej.
Może to uniemożliwić przejście debuggera przez kod C, ponieważ struktury zdefiniowane w C już nie istnieją, zostały zastąpione lub ponownie uporządkowane przez kompilator w coś, co zdaniem kompilatora będzie szybsze lub zajmie mniej miejsca. Może również uniemożliwić ustawienie punktów przerwania z listy C, ponieważ instrukcja, na której się łamałeś, może już nie istnieć. Na przykład możesz spróbować ustawić punkt przerwania w instrukcji if, ale kompilator mógł go usunąć. Możesz spróbować ustawić punkt przerwania w pętli forsa lub for, ale kompilator postanowił rozwinąć tę pętlę, aby już nie istniała.
Z tego powodu, jeśli możesz debugować przy wyłączonych optymalizacjach, zwykle jest to łatwiejsze. Zawsze powinieneś ponownie testować z włączonymi optymalizacjami. Jest to jedyny sposób, w jaki dowiesz się, że przegapiłeś coś ważnego volatile
i powoduje to sporadyczne awarie (lub inną dziwność).
W przypadku programowania wbudowanego należy zachować ostrożność przy optymalizacji. W szczególności w częściach kodu, które mają krytyczne znaczenie dla czasu, na przykład niektóre przerywają. W takich przypadkach należy albo zakodować krytyczne bity w zestawie, albo skorzystać z dyrektyw kompilatora, aby upewnić się, że te sekcje nie są zoptymalizowane, aby wiedzieć, że mają one ustalony czas wykonania lub ustalony najgorszy czas działania.
Innym gotcha może być dopasowanie kodu do sterownika, możesz potrzebować optymalizacji gęstości kodu, aby po prostu dopasować kod do układu. Jest to jeden z powodów, dla których zwykle dobrym pomysłem jest zacząć od największej pojemności pamięci ROM uC i wybrać tylko mniejszą do produkcji, po zablokowaniu kodu.