Отладчик под Windows (C)

Тема в разделе "WASM.WIN32", создана пользователем AlannY, 24 окт 2008.

  1. AlannY

    AlannY New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2008
    Сообщения:
    41
    Всегда программировал под Linux, компилируя программы с gcc, но сейчас пишу прогу чисто под Windows, используя cl+link. Всё вроде бы нормально, но иногда попадаю с ситуацию, которая в Linux называется Segmentation Fault. Проблема в том, что хрен знает где именно в моей программе происходит сбой. Под Linux есть дебаггер gdb, у которого есть комманда bt (BackTrace), при помощи которой можно посмотреть место последнего вызова и даже строку в коде. Но т.к. я сейчас не использую gdb, посмотреть не могу.

    Ещё проблема усложняется тем, что я не использую среду Visual C++, а использую привычный мне VIM. Т.е. у меня нет дебаггера, встроенного в среду. Может его можно использовать вне среды? Может подскажете как? Ещё я слышал есть WinDbg, но как им пользоваться - я так и не разобрался. Ещё у меня на компе есть OllyDbg 1.10, но как её пользоваться для Back Trace я не уловил... может зря.

    В общем - проблема в откладки кода, написанного не в студии (вижуал) :)
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    cdb, после gdb не думаю что будет проблема разобраться

    http://www.codeproject.com/KB/debug/cdbntsd.aspx
    первая ссылка в гугле
     
  3. AlannY

    AlannY New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2008
    Сообщения:
    41
  4. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Эээ, да... маразм крепчал..

    1) бегом сюда: http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

    2) в Makefile поставь "cl ..... /Zi" и "link .... /DEBUG"

    3) WinDBG: File -> Open Executable, Debug -> Run
     
  5. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    а что мешает пользоваться mingw (gcc порт на win32) и gdb (тоже порт на win32). Я так делаю и ОС вообще никак не влияет на процесс разработки.

    update: vim конечно тоже неотъемлимый инструмент, независимо от ОС.
     
  6. AlannY

    AlannY New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2008
    Сообщения:
    41
    Подумываю о переходе на gcc, ибо уже замучился с этим компилятором :-(

    Там (в MinGW) вроде есть поддержка WinAPI...
     
  7. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    конечно. Mingw - полноценная среда разработки под win32 базирующаяся на gcc.
     
  8. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    AlannY, если хочешь gcc, то кочни cygwin и получишь bash/gcc/g++/ld и, ессно, Posix API.

    Кста, GUI отлачика лучше чем в VS2005/2008 просто на рынке нет (ессно разговор про C++ проги c исходником). C другой стороны gdb работат через TCP или serial и с разным железом :)
     
  9. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    syser
    olly
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    а почему бы не использовать Visual Studio, где все удобно в одном месте расположено?
    PS. в олли есть кнопочка K кажется она выводит call stack. это ты имел в виду под бектрейс? (с гдб не работал)
     
  11. luckysundog

    luckysundog New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2008
    Сообщения:
    106
    советую разобраться с WinDbg.

    кстати:
    http://www.codeproject.com/KB/debug/windbg_part1.aspx#_Toc64133671
     
  12. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    DrWatson не помогает? Там можно выставить глубину детализации и, в удачном случае, определиться до строки кода.
    Может помочь и простая трассировка (SI, IDA Debugger, Borland TD32).

    Наконец, в _собственном_ коде ничего не стоит вставить логгирование/отладочную печать/трассировку (#ifdef __DEBUG__).

    Как пример, создать кольцевой буфер на ~256 Kb, засунуть весь код в единственный try/catch, из всех проблемных функций писать отладочную выдачу в этот буфер, при крэше дампить его на диск. Простейший вьювер покажет не только весь стэк вызовов (логгированный), но и значения критических переменных.