2012-12-21 13 views
5

Potrzebuję debugowania wersji mojej połączonej biblioteki. Już generuję informacje debugowania z moją wersją wydania po tym article, ale jak mogę zrobić to samo z projektem biblioteki? Zwróć uwagę, że projekt biblioteki nie zawiera strony linków we właściwościach, w których informacje dotyczące debugowania są tworzone w powyższym linku. Używam VS2010.jak debugować wersję wydania biblioteki w Visual Studio

To, czego naprawdę chcę, to sprawić, aby praca TRACE debugowała bibliotekę. Próbowałem połączyć wersję biblioteki debugowania z wersją release, ale tworzy błędy linkera.

+1

Czy mówisz o bibliotece statycznej lub bibliotece DLL? –

+0

@JerryCoffin To biblioteka statyczna bez biblioteki dll. – zar

+0

Jakiego rodzaju uruchomiłeś aplikację? – makc

Odpowiedz

2

Co ja naprawdę chcę to zrobić pracę TRACE ...

To znaczy, ślad makro MFC? Ten, który zapisuje komunikaty do okna debugowania/wyjścia debuggera?

Niestety, nawet jeśli poprawisz ustawienia kompilacji, aby ostateczny plik wykonywalny zawierał informacje o debugowaniu dla twojej biblioteki statycznej, to nie przywróci on tych instrukcji śledzenia. TRACE jest makro i dlatego jest obsługiwane przez preprocesor kompilatora. Gdy kompilujesz w trybie zwolnienia, to makro jest na nowo definiowane jako no-op. To tak, jakby instrukcja TRACE została usunięta z kodu źródłowego.

Nawet jeśli rozwiążesz problem dodawania symboli debugowania do biblioteki i pliku wykonywalnego, nie odzyskasz tych instrukcji śledzenia. Zostały one usunięte podczas fazy kompilacji.

Co robić? Okazuje się, że jeśli wystarczająco głęboko zagłębisz się w te makra, to ostatecznie wywołują funkcję Win32 OutputDebugString. To wywołanie jest dostępne zarówno w wersjach debugowania, jak i wersji bibliotek ms. A więc ... możesz zamienić makra śledzenia na jawne wywołania OutputDebugString - nie jest to wygodne z kodowaniem, ale przynajmniej otrzymasz wyjście debugowania w trybie zwolnienia.

BTW, w końcu zrezygnowałem z tych wszystkich makr lata temu i całkowicie zastąpiliśmy je telefonami log4cplus. Każda struktura rejestrowania byłaby lepsza niż makra śledzenia - ponieważ czas, w którym naprawdę potrzebujesz śledzenia, nie jest podczas debugowania, ale kiedy kod jest w trakcie produkcji i nie można odtworzyć problemu lokalnie. O wiele lepiej jest zalogować się do pliku, który klient może wysłać do ciebie, a następnie polegać na śledzeniu, które działa tylko w debugerze. Coś do rozważenia w każdym razie ...

+0

+1 Zauważyłem, że TRACE nie działa, Twoja odpowiedź pomogła. – zar

1

Biblioteka statyczna nie jest powiązana, więc nic dziwnego, że opcje linkerów są niedostępne. Zasadniczo wystarczy powiedzieć kompilatorowi, aby wygenerował informacje dotyczące debugowania. Stamtąd tworzenie biblioteki to nic innego jak umieszczenie kilku plików obiektów w jednym pliku.

Po prostu powiedz po prostu kompilatorowi, aby uzyskać informacje o debugowaniu, a biblioteka będzie zawierała informacje diagnostyczne.

+0

+1 dzięki, że masz rację, wyłączyłem optymalizację i udało mi się to debugować. Jeszcze przed tym byłem w stanie debugować/wkraczać w kod wcześniej, ale okno zegarka pokazywało fałszywe wartości w czasie. – zar

Powiązane problemy