Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Откуда вызов? (число прочтений - 2110 )
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Откуда вызов?
16. Июля 2012 :: 07:53
Печать  
Как определить, откуда (из какой функции) был произведен вызов функции глобальника?
пробовал вставить директиву //#exinfo, но она, походу, только в классах работает Печаль есть идеи?
Проблема в том, что иногда в функцию передается пустой параметр, а момент словить не получается, т.к. отладчик не хочет выходить из этой функции... точнее выходит, но далее не отлаживает!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Откуда вызов?
Ответ #1 - 16. Июля 2012 :: 08:53
Печать  
Дык замер производительности включи в жуколове и посмотри стэк вызовов
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Откуда вызов?
Ответ #2 - 16. Июля 2012 :: 11:19
Печать  
Eprst писал(а) 16. Июля 2012 :: 08:53:
Дык замер производительности включи в жуколове и посмотри стэк вызовов


Да просто достаточно точку останова (можно с условием) и посмотреть стек вызовов.

Другое дело, если трудно добиться повторяемости ситуации, и нужно просто писать в лог, чтоб потом посмотреть.
В этом случае, разве что формексом получать активный контекст (а если это форма - то можно еще и активный элемент формы).
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Откуда вызов?
Ответ #3 - 16. Июля 2012 :: 11:50
Печать  
Satans Claws писал(а) 16. Июля 2012 :: 11:19:
В этом случае, разве что формексом получать активный контекст (а если это форма - то можно еще и активный элемент формы).
Ты не понял вопроса:
Dmitry The Wing писал(а) 16. Июля 2012 :: 07:53:
Как определить, откуда (из какой функции) был произведен вызов функции глобальника?
Т.е. формы там никакой нет...

Спасибо что напомнили оба про:
Eprst писал(а) 16. Июля 2012 :: 08:53:
посмотри стэк вызовов
Это и было то, что надо.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Откуда вызов?
Ответ #4 - 17. Июля 2012 :: 07:30
Печать  
Dmitry The Wing писал(а) 16. Июля 2012 :: 11:50:
Satans Claws писал(а) 16. Июля 2012 :: 11:19:
В этом случае, разве что формексом получать активный контекст (а если это форма - то можно еще и активный элемент формы).
Ты не понял вопроса:
Dmitry The Wing писал(а) 16. Июля 2012 :: 07:53:
Как определить, откуда (из какой функции) был произведен вызов функции глобальника?
Т.е. формы там никакой нет...


За некоторыми исключениями, форма (точнее, активный контекст) есть всегда.
Функция не может вызваться с бухты-барахты. Кто-то должен быть инициатором.
И за исключеним таких случаев, как: обработка ожидания, кнопка интефейса с командой, действия из еще не открывшейся формы, внешнее событие - пожалуй и все, будет контекст, откуда инициализировали поток исполнения, приведший в эту функцию глобальника.

Я же специально уточнил, что если ошибка трудно формализуема (т.е. периодически видим в журнале регистраций ошибку в глобальной функции, но не можем понять откуда она вызывается с неправильными параметрами) и ты не знаешь способа добиться ее воспроизведения - то логирование активного контекста вполне может помочь узнать, примерно какие действия пользователя ведут к ней.
А потом, научившись ее воспроизводить, - отладчик в руки и вперед.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать