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 ...
Czy mówisz o bibliotece statycznej lub bibliotece DLL? –
@JerryCoffin To biblioteka statyczna bez biblioteki dll. – zar
Jakiego rodzaju uruchomiłeś aplikację? – makc