2011-01-05 18 views
25

mam wyjście debugowania w moim programie tak:Automatyczne #defines według Debug config/Release w Visual Studio 2010

#ifdef DEBUG 
    std::cout << "[RE_words] " << re << std::endl; 
    try { 
     boost::regex regex(re); 
     std::cout << "[RE_words] " << "passed" << std::endl; 
    } catch (exception& e) { 
     std::cout << "[RE_words] " << "failed: " << e.what() << std::endl; 
    } 
#endif 

i DEBUG jest zdefiniowana w moim programie ręcznie. Zawsze komentuję linię, kiedy robię wersję Release. W Visual Studio 2010 istnieją również wersje "Konfiguracja" dla wersji Debug vs Release, które obsługują linię poleceń itp. Używaną do kompilacji. Czy mogę również użyć opcji "Debugowanie konfiguracji", aby automatycznie zdefiniować kompilator jako DEBUG? W jaki sposób?

Odpowiedz

58

Visual Studio automatycznie definiuje symbol _DEBUG dla wersji do debugowania (i NDEBUG dla kompilacji bez debugowania).

Innym sposobem, aby to zrobić, jest przejście do ustawień projektu -> właściwości konfiguracji -> C/C++ -> preprocesor i edycja definicji preprocesora ręcznie.

Zobacz także:
This answer wyjaśnia szczegółowo różnice pomiędzy _DEBUG i NDEBUG.
This answer objaśnia cel symbolu NDEBUG i czy jest on określony przez normę.

+6

N Przypadki, NDEBUG jest przenośnym rozwiązaniem. To niefortunne, że nie ma standardowego symbolu dla buildów DEBUG. –

+0

Witam, jak możesz być pewien, że vs definiuje te makra? na msdn po prostu wspomnieć o _DEBUG, a nie NDEBUG, gdzie mogę zobaczyć listę ze wszystkimi makrami VS dla ciebie? – Icebone1000

+0

@ Icebone1000: Dodałem link do odpowiedzi wyjaśniającej, czy NDEBUG jest standardowym symbolem i dlaczego miałby być uważany za przenośny. Zobacz [listę predefiniowanych makr] (http://msdn.microsoft.com/en-us/library/b0084kay (v = vs.110) .aspx) w VS. –

8

Użyj _DEBUG. Visual C++ definiuje to dla konfiguracji debugowania. Sprawdź dyrektywy preprocesora dotyczące konfiguracji debugowania w oknie dialogowym właściwości projektu.

0

Tak, należy sprawdzić stronę opcji projektu, Kompiluj-> Zaawansowane opcje kompilacji. Jednak VS domyślnie automatycznie definiuje dyrektywę DEBUG dla trybu debugowania.

+1

Uważam, że jest to dyrektywa '_DEBUG'. Zwróć uwagę na podkreślenie. –

3

Ja też pomyślałem, że wystarczy spojrzeć na własność preprocesora i usunąć _DEBUG. Visual Studio próbuje pomóc, ustawiając _DEBUG, jeśli wybierzesz jedną z opcji biblioteki uruchomieniowej debugowania.

na nieruchomości stronie projektu Właściwości konfiguracyjne \ C/C++ \ Code Generation wybrana opcja dla Runtime Library wpływa kilka definiuje. Przy wyborze bibliotekę debugowania (/MTD lub /MDD) z _DEBUG określić jest zestaw.

Więcej informacji na temat przełączników można znaleźć pod numerem MSDN /MD, /MT ... . Istnieje kilka #defines ustawionych na podstawie tych opcji. Są one dość niewidoczne, gdy próbujemy znaleźć, kto ustawia # definicję, zanim włączysz pliki nagłówkowe !!