Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2014, 14:25   #1
daniil_galahow
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 13
По умолчанию Логирование вызовов функций в C++

Здравствуйте, почтенные форумчане!
Столкнулся с о следующей проблемой:
Имеется внушительных размеров проект на С++, без документации и комментариев (то есть вообще без). "Гений", напейсавший это, тоже ныне недоступен.
Проект при компилляции формирует DLL-ку, которая производит определенные научные вычисления, и используется в другом, ещё более крупном программном пакете.
Стоит задача - выцепить из проекта алгоритм вычисления, и переписать заново, "чисто".

Осложнения возникли после того как стал разбирать код. В коде прорва мелких объектов, с очень глубоким наследованием. Методы вызывают методы которые вызывают методы. (Вызовы их имеют степень вложенности по 5-6 уровней).

Решил что руками это разбирать будет долго, попытался написать некий логгер, который бы логировал вызовы функций и параметры, в них передаваемые.
Нашел предефайненное выражение __FUNCTION__, нашел функцию StackWalk64(), нашёл гайд по этой функции и образцы как писать.
Нашёл также как находить точку входа в функцию с помощью регулярных выражений.

Однако это всё не то. Чтобы с помощью этих способов логировать вызовы, нужно как-то вставлять их вызов в функции в исследуемом проекте. А это не особо быстрее чем разбирать код вручную. Регулярные выражения не помогают - "гений" форматировал код то так то эдак, регулярники на поиске запинаются.

Стал искать дальше, наткнулся на ключ компиллятора /Gh, активирующий функцию _penter. Казалось бы - вот оно!
Но нет - при попытке компилляции выдает ошибку

Цитата:
error D8016: '/clr' and '/Gh' command-line options are incompatible
В проекте никакого clr-кода нет, в ключах компиллятора проекта - тоже /clr нет.
Нахожусь в состоянии озабоченности близкой к озадаченности.

Уважаемые коллеги, пожалуйста, подскажите, как можно реализовать логгер в подобной ситуации, или другие решения проблемы, если они есть.
daniil_galahow вне форума Ответить с цитированием
Старый 26.03.2014, 16:03   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Если нужно отследить последовательность вызовов функций , то можно подключиться отладчиком (WinDbg) и воспользоваться командой wt.
counter вне форума Ответить с цитированием
Старый 26.03.2014, 16:08   #3
daniil_galahow
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 13
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
Если нужно отследить последовательность вызовов функций , то можно подключиться отладчиком (WinDbg) и воспользоваться командой wt.
Спасибо. А позволит ли WinDbg отследить названия функций и передаваемые значения?
daniil_galahow вне форума Ответить с цитированием
Старый 27.03.2014, 12:22   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Конечно. У вас же есть символы к скомпилированным бинарникам?
counter вне форума Ответить с цитированием
Старый 10.04.2014, 17:07   #5
daniil_galahow
Пользователь
 
Регистрация: 04.03.2013
Сообщений: 13
По умолчанию

Спасибо, counter. WinDBG с символ-файлами помог.
daniil_galahow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логирование qZED Общие вопросы Delphi 18 13.01.2014 15:17
python логирование Lemon2009 PHP 1 11.09.2012 15:59
Логирование EventLog mrChester Общие вопросы .NET 7 18.04.2012 09:55
Мониторинг вызовов АПИшных функций TwiX Win Api 4 18.06.2011 00:09
Способы вызовов функций MultIfleX Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 16.10.2007 06:07