- Регистрация
- 1 Мар 2015
- Сообщения
- 1,481
- Баллы
- 155
Во время отладки приложения появляется окно сообщения, и мне нужно знать его происхождение - откуда в коде оно было вызвано? Поиск в кодовой базе строки сообщения может сработать, но сообщение может быть создано динамически, так что это определенно не сработает. Я склонен использовать следующую технику, чтобы добраться до исходной точки.
Прежде всего приостановите приложение с помощью пункта меню «Выполнить», «Приостановка программы» или аналогичной кнопки.
В этот момент вы можете подумать, что стек вызовов поможет, но, увы, нет. Как мы видим здесь, стек вызовов пуст:
Однако важной частью информации здесь является то, что отладчик просматривает не тот поток с точки зрения того, что нас интересует Ctrl+Alt+T. at является последним в списке.
Эта тема нам неинтересна. Нам нужен основной поток, UI-поток, который стоит первым в списке. Дважды щелкните этот первый поток, и стек вызовов сразу же пополнится множеством записей:
Если вы сканируете сверху вниз, вы начнете видеть подозрительно выглядящие записи, связанные с работой окна сообщений, и в конечном итоге (и мы надеемся) вы придете к записям, связанным с вашим кодом. В приведенном ниже случае первая запись в «коде пользователя» (мой код) — это TForm2.Five. Если вы дважды щелкните эту запись, вы попадете в соответствующий код, а редактор выделит точку, к которой мы вернемся (после вызова) красным цветом (по умолчанию). Конечно, красная линия находится сразу после моего вызова ShowMessage.
Прежде всего приостановите приложение с помощью пункта меню «Выполнить», «Приостановка программы» или аналогичной кнопки.
В этот момент вы можете подумать, что стек вызовов поможет, но, увы, нет. Как мы видим здесь, стек вызовов пуст:
Однако важной частью информации здесь является то, что отладчик просматривает не тот поток с точки зрения того, что нас интересует Ctrl+Alt+T. at является последним в списке.
Эта тема нам неинтересна. Нам нужен основной поток, UI-поток, который стоит первым в списке. Дважды щелкните этот первый поток, и стек вызовов сразу же пополнится множеством записей:
Если вы сканируете сверху вниз, вы начнете видеть подозрительно выглядящие записи, связанные с работой окна сообщений, и в конечном итоге (и мы надеемся) вы придете к записям, связанным с вашим кодом. В приведенном ниже случае первая запись в «коде пользователя» (мой код) — это TForm2.Five. Если вы дважды щелкните эту запись, вы попадете в соответствующий код, а редактор выделит точку, к которой мы вернемся (после вызова) красным цветом (по умолчанию). Конечно, красная линия находится сразу после моего вызова ShowMessage.