2013-07-16 14 views
6

Jeśli umieścisz plik CPP z innego pliku CPP, XCode odmawia złamania w dowolnym punkcie przerwania w dołączonym pliku CPP. Zamierzam zgłosić błąd z Apple, ale chciałem tylko wspomnieć o tym tutaj, na wypadek, gdyby inni doszli do tego i mogli znaleźć sposób obejścia tego problemu.Kod XCode nie włamuje się do # include'd plików CPP

Istnieją bardzo dobre powody, dla których możesz chcieć dołączyć pliki CPP z plików CPP, których nie będę tu wprowadzać. Wystarczy powiedzieć, że nie mogę w prosty sposób zmienić projektu, aby skompilować bezpośrednio zawarte pliki.

Przykład: bardzo prosty projekt iPhone

main.mm

extern void FunctionInSource1(int a); 

int main(int argc, char * argv[]) 
{ 
    FunctionInSource1(1); 

    return 0; 
} 

source1.cpp

#include "source2.cpp" 

void FunctionInSource1(int a) 
{ 
    int b = a; 

    FunctionInSource2(b); 

    return; 
} 

source2.cpp

void FunctionInSource2(int b) 
{ 
    int c = b; 

    c = c + 1; 

    return; 
} 

main.mm i source1.cpp są elementami docelowymi, tzn. Są ustawione na kompilację. source2.cpp NIE jest członkiem obiektu docelowego i NIE jest kompilowany, chyba że został włączony do źródła1.cpp.

Ustawienie punktu przerw w dowolnym miejscu w pliku source2.cpp nie wyzwala. Punkty przerw w innych miejscach działają dobrze. N.B. Nadal możesz wejść na source2.cpp z source1.cpp na przykład, po prostu nie włamuj się bezpośrednio do źródła2.cpp

Jeśli ktoś wymyśli jakieś rozwiązanie, byłbym bardzo szczęśliwy, słysząc o tym.

Max

+1

A nie korzystałeś z optymalizacji, aby kompilator wprowadził całą operację? –

Odpowiedz

14

Dzięki post Powyżej na forach programistycznych apple i teraz rozwiązać ten problem.

Kompilator załącza te pliki i domyślnie LLDB nie włamuje się do załączonych plików. Aby zmusić go do zerwania, musisz dodać ustawienie do pliku .lldbinit.

Edit (lub utworzyć) plik ~/.lldbinit i dodać następujący wiersz:

settings set target.inline-breakpoint-strategy always 

to tak proste!

+0

Wow. Zapisano plik, uruchomiłem projekt ponownie, trafienie punktami przerwania. Dzięki! –

Powiązane problemy