|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.03.2014, 14:25 | #1 | |
Пользователь
Регистрация: 04.03.2013
Сообщений: 13
|
Логирование вызовов функций в C++
Здравствуйте, почтенные форумчане!
Столкнулся с о следующей проблемой: Имеется внушительных размеров проект на С++, без документации и комментариев (то есть вообще без). "Гений", напейсавший это, тоже ныне недоступен. Проект при компилляции формирует DLL-ку, которая производит определенные научные вычисления, и используется в другом, ещё более крупном программном пакете. Стоит задача - выцепить из проекта алгоритм вычисления, и переписать заново, "чисто". Осложнения возникли после того как стал разбирать код. В коде прорва мелких объектов, с очень глубоким наследованием. Методы вызывают методы которые вызывают методы. (Вызовы их имеют степень вложенности по 5-6 уровней). Решил что руками это разбирать будет долго, попытался написать некий логгер, который бы логировал вызовы функций и параметры, в них передаваемые. Нашел предефайненное выражение __FUNCTION__, нашел функцию StackWalk64(), нашёл гайд по этой функции и образцы как писать. Нашёл также как находить точку входа в функцию с помощью регулярных выражений. Однако это всё не то. Чтобы с помощью этих способов логировать вызовы, нужно как-то вставлять их вызов в функции в исследуемом проекте. А это не особо быстрее чем разбирать код вручную. Регулярные выражения не помогают - "гений" форматировал код то так то эдак, регулярники на поиске запинаются. Стал искать дальше, наткнулся на ключ компиллятора /Gh, активирующий функцию _penter. Казалось бы - вот оно! Но нет - при попытке компилляции выдает ошибку Цитата:
Нахожусь в состоянии озабоченности близкой к озадаченности. Уважаемые коллеги, пожалуйста, подскажите, как можно реализовать логгер в подобной ситуации, или другие решения проблемы, если они есть. |
|
26.03.2014, 16:03 | #2 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Если нужно отследить последовательность вызовов функций , то можно подключиться отладчиком (WinDbg) и воспользоваться командой wt.
|
26.03.2014, 16:08 | #3 |
Пользователь
Регистрация: 04.03.2013
Сообщений: 13
|
|
27.03.2014, 12:22 | #4 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Конечно. У вас же есть символы к скомпилированным бинарникам?
|
10.04.2014, 17:07 | #5 |
Пользователь
Регистрация: 04.03.2013
Сообщений: 13
|
Спасибо, counter. WinDBG с символ-файлами помог.
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Логирование | 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 |