• 0
walexw

Кто вызвал процедуру

Вопросы

Вопрос к знатокам Delphi
Можно ли, находясь в процедуре, узнать какая другая процедура ее вызвала.
Если ДА, то как?
Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 ответов на этот вопрос

  • 0

Пытаюсь разобрать чужой код (проект здоровый, процедур много)
По ходу заполняется TreeView, откуда не понятно, надо найти.
В процедуре регистрации панели (RegisterSetupPanel) последняя строчка  AddTreeTag
там заполняется одна строка TreeView (значением TagPath: String), а всего строк 10,
значит 10 раз отрабатывает. Внутри RegisterSetupPanel я "стою" в дебаггере,
отследить получается только первую строчку, но кто "толкнул" неизвестно.
Ссылки на запуск RegisterSetupPanel внутри проекта нет, вот мне и надо найти
кто его "толкает".

procedure TfrmSetup.RegisterSetupPanel(TagPath: String; aObject: TControl);
var Frm: TCustomForm;
    i: integer;
begin
  Frm := GetParentForm(TControl(aObject));
  if (Frm.Width+panLeft.Width)<Screen.Width then
    if(Frm.Width+panLeft.Width) > Width then
      Width:= Frm.Width+panLeft.Width;
  SetActionEnabled(TPanel(aObject), false);
  for i := 0 to Frm.ComponentCount - 1 do
    if Frm.Components is TActionList then begin
      frmSetup.InsertComponent(Frm.Components);
      Frm.RemoveComponent(Frm.Components);
      Break;
    end;

  aObject.Parent := panMain;
  aObject.Visible := false;
  AddTreeTag(nil, TagPath).Data := aObject;
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

переименуйте методы, компилятор скажет где она вызывается

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

В JCL встречал подобное - ProcByLevel в JclDebug .

Но без Debug info это не узнаешь. А как это будет работать на других компиляторах тоже неизвестно.

Если вам не нужно получать весь стэк, то конечно лучше передавать или константой имя процедуры или через тип.

Также это почитайте http://eurekalog.blogspot.com/2010/05/new-exception-class-in-delphi-2009-and_05.html

Upd 

Я что-то подумал что вам нужно логгер сделать, по типу MadExcept, все оказалось проще.

Изменено пользователем ENRGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Upd   

Цитата

но кто "толкнул" неизвестно.

Используйте Call Stack (View > Debug Windows)

Изменено пользователем ENRGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

надо было сразу говорить, что под отладчиком

Call Stack, +1

Изменено пользователем krapotkin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу