Форум: "Прочее";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];
ВнизCallStack vs обработчики событий Найти похожие ветки
← →
Пит (2009-07-07 17:37) [0]Почему анализаторы CallStack (например, из JCL) не видят "заходы" в обработчики событий (event)? Конструкции аля:
if Assigned(FNotify) then FNotify(param) ;
реализуются через комманды call / ret, вроде как все должно быть нормально... Ан нет. Никто не в курсе?
← →
Пит (2009-07-08 10:48) [1]вопрос может сформулирован непонятно?
← →
oxffff © (2009-07-08 11:01) [2]
> Пит (08.07.09 10:48) [1]
Да понятно он сформулирован.
Я не видел JCL.
Как они трейсят?
По Stack Frame?
Посмотри включен ли он у тебя.
← →
Пит (2009-07-08 13:06) [3]
> По Stack Frame?
вроде как да.
← →
Пит (2009-07-08 13:10) [4]Кажется, я понял... Не в событиях дело, просто у событий зачастую отсутствуют локальные параметры, а при отсутствии локальных параметров дельфя не формирует стек-фрейм (по-умолчанию $w-), а точнее не использует конструкции:
push ebp;
mov ebp, esp;
В виду ненужности использования ebp...
← →
Пит (2009-07-08 13:11) [5]oxffff, а как еще можно трейсить? Упоминают некий RAW метод, который вроде позволяет обойти ориентировку на стек-фреймы. Не пояснишь, в чем сам принцип поиска?
← →
Пит (2009-07-08 13:17) [6]И еще, если уж такая пьянка пошла, интересна пара вопросов по формируемому дельфей MAP-файлу.
1) что такое 0001 и 0002 в адресах, допустим:
0001:000030D8 @LStrCat
...
0002:00002B54 DockSiteList
2) почему в MAP-файле отсутствует разлиновка по строчкам (Line numbers for ...) для встроенных модулей дельфи?
То есть, в простеньком проекте:
- Line numbers for Unit1(Unit1.pas) segment .text
...
- Line numbers for Project1(C:\Users\Mig\Desktop\CallStack_example\Project1.dpr) segment .text
...
Где разлиновка других модулей, хотя бы Forms? Ведь DCU должны быть, линковщик почему не строит для них соответствия?
← →
oxffff © (2009-07-08 13:42) [7]> Пит
Я не знаю что такое RAW режим.
Но чисто технически возможно IMHO
1. например отлавливать вызов compiler magic функций например для addref при входе в процедуру и releaseref при выходе из нее для управляемых типов(dynArray;variants,string,record with managed types...). Понятно что для целочисленных процедур такое не сработает, но как вариант.
2. Формировать исключения и смотреть адрес обработчика.
3. Эмулировать исполнение.
Что касаемо map файла я с ним не сталкивался.
← →
Пит (2009-07-08 13:42) [8]ах, ну и для полного загруза )))
Может подскажешь, до какого момента имеет смысл раскручивать стек? ESP указывает на вершину, а где начало? Я бегаю по стеку, но до какого момента это нужно делать.
Я думаю, уж точно не дальше начала надо раскручивать, но как узнать начало стека? А на самом деле теряется смысл раскрутки уже когда указатели ведут в стандартные модули винды. Как элегантно настроить остановку раскрутки?
← →
Пит (2009-07-09 11:08) [9]эх, перевелись системщики на земле русской )))
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.09.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c