October 2008

Uwaga! Informacje na tej stronie mają ponad 3 lata. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

20:43
Wed
29
Oct 2008

Potęga breakpointów w Visual C++

Używanie debuggera to podstawa efektywnego programowania. Na stawianiu breakpointów, pracy krokowej i podglądaniu wartości zmiennych nie trzeba jednak poprzestawać. Warto wiedzieć, że w Visual C++ można kliknąć prawym klawiszem myszy w czerwone kółeczko breakpointa i otwierają się wtedy nowe możliwości. Pośród nich jest "Condition", które pozwala wpisać warunek zatrzymania czy "Hit Count", które pozwala zatrzymać program tylko co któreś wejście do zaznaczonej instrukcji.

Najciekawsze jednak jest polecenie "When Hit", które zamienia pułapkę w zdarzenie powodujące zalogowanie komunikatu do okienka Output. Można wtedy wpisać swój dowolny komunikat używając specjalnych zmiennych m.in. z nazwą funkcji bieżącej, funkcji nadrzędnej oraz dowolnego wyrażenia z wykorzystaniem dostępnych w danym miejscu zmiennych. Dzięki temu można wstawiać do programu drukowania kontrolne bez modyfikowania źródła i przekompilowania swojego programu.

Visual C++ Breakpoint When Hit

Comments (0) | Tags: visual studio | Author: Adam Sawicki | Share

22:51
Sun
26
Oct 2008

Elementarne algorytmy - pomysł na artykuł

Dawno, dawno temu wymyśliłem pewien artykuł dla początkujących. Zauważyłem bowiem, że między tematami najczęściej podejmowanymi w nauce programowania - opanowaniem języka programowania i opanowaniem bardziej zaawansowanych tematów, jak biblioteka graficzna czy algorytmika - istnieje pewna luka i wielu adeptów ma z tym problem. Chodzi o 1. podstawowe struktury danych, 2. projektowanie i używanie własnych formatów plików oraz 3. elementarne algorytmy i sztuczki programistyczne.

Dwa pierwsze tematy opisałem w jakimśtam stopniu 4 lata temu w artykule Struktury danych i formaty plików. Trzeci chciałem opisać w ubiegłe wakacje, ale wyjaśnienie wszystkich zebranych zagadnień w dostatecznie dokładny i przystępny sposób kosztowałoby zbyt dużo pracy. Dlatego jedyne co zrobiłem to teraz spisałem wreszcie i opublikowałem sam "projekt" tego artykułu (co samo w sobie było niemałym zadaniem) - Elementarne algorytmy.txt.

Comments (0) | Tags: algorithms ideas teaching | Author: Adam Sawicki | Share

23:12
Tue
14
Oct 2008

Visual C++ - rozszerzenia Microsoftu

Visual C++ oferuje wiele rozszerzeń do standardu języka C++. Jeżeli tylko można sobie pozwolić na ograniczenie się do kompilatora Microsoftu, warto z nich korzystać. Na przykład:

Przykłady użycia:

char sz[128];
sprintf_s(sz, _countof(sz), "Liczba=%u", 123);

void KlasaPochodna::Metoda() {
  __super::Metoda();
  ...
}

Dużo oferują też dyrektywy preprocesora #pragma. Na przykład pragma pack pozwala ustawić wyrównanie dla pól struktury czy klasy, once zastępuje tradycyjne zabepieczanie nagłówków za pomocą #ifndef, deprecated służy do zadeklarowania identyfikatora jako niezalecanego, a push_macro i pop_macro pozwala zapamiętywać i przywracać definicję makra.

Comments (0) | Tags: c++ visual studio | Author: Adam Sawicki | Share

21:13
Fri
03
Oct 2008

Crash Dump

Życie programu w Windows nie kończy się wraz z błędem ochrony pamięci albo dzieleniem przez zero. Takie błędy można łapać, a co więcej, można z nich tworzyć tzw. Crash Dump - plik DMP, który wysłany do programisty może mu pomóc zlokalizować problem.

Należy objąć swój kod w sekcję __try { ... } __except ( MojaFunkcja( GetExceptionInformation() ) ) { }, a w swojej funkcji wywołać MiniDumpWriteDump pochodzącą z biblioteki Dbghelp. Ta biblioteka z kolei rozprowadzana jest jako Debugging Tools for Windows, ale do użycia tej funkcji wystarczy wersja domyślna z Windows XP.

Potem plik DMP można otworzyć w Visual C++ (rozszerzenie jest z nim domyślnie skojarzone). Trzeba jeszcze posiadać plik PDB z symbolami (powstaje w czasie kompilacji obok EXE/DLL) i już można zobaczyć gdzie wystąpił błąd, analizując np. stos wywołań Call Stack. Można nawet ściągnąć symbole do bibliotek systemowych. Ścieżki do symboli ustawia się w Tools > Options > Debugging > Symbols, lokalizacja z symbolami od bibliotek systemowych to http://msdl.microsoft.com/download/symbols.

Niestety sprawa nie jest taka prosta. Dodatkowo można na przykład postawić tzw. "Symbol Server" (to po prostu specjalny katalog zarządzany przez dedykowane programy z pakietu Debugging Tools for Windows), a podczas używania tych mechanizmów pojawia się wiele problemów (może ktoś coś poradzi na mój problem? :)

Comments (1) | Tags: c++ winapi | Author: Adam Sawicki | Share

STAT NO AD [Stat] [Admin] [STAT NO AD] [pub] [Mirror] Copyright © 2004-2017 Adam Sawicki
Copyright © 2004-2017 Adam Sawicki