Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как узнать объекты ссылающиеся на нужный объект / 9 сообщений из 9, страница 1 из 1
13.02.2008, 09:15
    #35128843
=Dimon=
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать объекты ссылающиеся на нужный объект
Здравствуйте!
Подскажите, пожалуйста, как можно увидеть объекты ссылающихся на нужный объект. Система имеет уже больше 200 классов, и очень сложно порой отследить почему у одного объекта не вызвался %OnClose, либо не вызывается %OnOpen, так как элемент уже кем, то держится.
...
Рейтинг: 0 / 0
13.02.2008, 13:01
    #35129696
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать объекты ссылающиеся на нужный объект
Если Вы хотите увидеть объекты в памяти, то есть $system.OBJ.Dump, $system.OBJ.ShowObjects().
Если нужно посмотреть параметры классов, то либо через документацию, либо самостоятельно
через %Dictionary
...
Рейтинг: 0 / 0
14.02.2008, 03:34
    #35131506
=Dimon=
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать объекты ссылающиеся на нужный объект
Maksim UMЕсли Вы хотите увидеть объекты в памяти, то есть $system.OBJ.Dump, $system.OBJ.ShowObjects().
Если нужно посмотреть параметры классов, то либо через документацию, либо самостоятельно
через %Dictionary

$system.OBJ.ShowObjects() - Выдаст мне список объектов и их свойства. А где ссылки? И если например объект А ссылается на объект Б, а объект Б в свою очередь ссылается на объект А, то максимум что выдаст этот метод будет 2 объекта. Объект А имеет свойство по типу объекта Б и ореф объекта Б. А про объект Б вообще промолчит, что у него есть свойство типа А.
...
Рейтинг: 0 / 0
14.02.2008, 08:31
    #35131629
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать объекты ссылающиеся на нужный объект
У вас недокументированные классы - и вы в них разбираетесь что ле ?

Открываете документацию от туда в Cache Class Reference - там выбираете вашу область - потом
жмете кнопку Search в правом верхнем углу.

В поиске выбираете тип поиска - All clases that REFERENCE - и указываете какой класс вас интересует - жмете [Search] - через пару секунд он вам выдат все классы и поля в них что ссылаются на указанный вами класс.
...
Рейтинг: 0 / 0
20.02.2008, 08:23
    #35143095
=Dimon=
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать объекты ссылающиеся на нужный объект
2Ptn
причем тут описание классов и работа самой системы?
Я спрашиваю как можно во время работы системы посмотреть какие объекты держат мой объект. Потому как открываю объекты методом OpenId, а OnOpen у них не вызвается, т.к. он уже кем-то держится в памяти! Как посмотреть?
...
Рейтинг: 0 / 0
20.02.2008, 11:12
    #35143530
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать объекты ссылающиеся на нужный объект
=Dimon=2Ptn
...
Я спрашиваю как можно во время работы системы посмотреть какие объекты держат мой объект. ...

Как посмотреть?

А вы не находите логичным - тот факт что ваш объект, по большому счету, могут держать обьекты которые содержать в своем описании поля ссылки на ваш ?

Это если конечно у вас не практикуется описывать поле одного типа объектов, а пихать в него объекты совершенно другого типа...

Описание классов вам даст те места где вообще могут появиться ссылки на ваш объект - и соответсвенно вооруженным этим знанием вы можете проинспектировать код на предмет утечек ссылок.

Если вы хотите это выполнять в рунтайм - то как уже советовали $System.OBJ.Dump([var]) и возможно некоторые $zobjxxx функции....
...
Рейтинг: 0 / 0
20.02.2008, 11:13
    #35143542
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать объекты ссылающиеся на нужный объект
Что такое OnOpen ?
...
Рейтинг: 0 / 0
20.02.2008, 15:41
    #35144873
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать объекты ссылающиеся на нужный объект
ага... по всей видимости имеется в виду %onOpen и он действительно не вызывается ....

Тогда - если конечно предпочитаете метод тыка....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
>d $system.OBJ.ShowObjects()
Oref      Class Name                    Sys Count      User Count
----      ----------                    ---------      ----------
 1          User.T2                        1                1 
 2          User.T2                        1                2 

>w 
a=<OBJECT REFERENCE>[ 1 @User.T2]

>w d $system.OBJ.Dump(a)

+----------------- general information ---------------
|      oref value:  1 
|      class name: User.T2
|             OID: ( 1 ,"User.T2")
| reference count:  2  (system),  1  (user)
+----------------- attribute values ------------------
| (%Concurrency) =  1 
|    (%IsInSave) =  0 
|             a1 = "2@User.T2"
+----------------- swizzled references ---------------
|           (none)
+-----------------------------------------------------

/// И теперь проверяем поле a.a1

>d $system.OBJ.Dump(a.a1)
+----------------- general information ---------------
|      oref value:  2 
|      class name: User.T2
|             OID: ( 2 ,"User.T2")
| reference count:  2  (system),  2  (user)
+----------------- attribute values ------------------
| (%Concurrency) =  1 
|    (%IsInSave) =  0 
|             a1 = ""
+----------------- swizzled references ---------------
|           (none)
+-----------------------------------------------------

либо соотвественно как варивант поочередно килять переменные и проверять ссылки

Но все таки куда спродручнее это делать кагда структуру классов ясна

Либо делаете
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
>d $system.OBJ.ShowObjects("d")
Oref      Class Name                    Sys Count      User Count
----      ----------                    ---------      ----------
 1          User.T2                        1                1 
+----------------- general information ---------------
|      oref value:  1 
|      class name: User.T2
|             OID: ( 1 ,"User.T2")
| reference count:  2  (system),  1  (user)
+----------------- attribute values ------------------
| (%Concurrency) =  1 
|    (%IsInSave) =  0 
|             a1 = "2@User.T2"
+----------------- swizzled references ---------------
|           (none)
+-----------------------------------------------------
 
 2          User.T2                        1                2 
+----------------- general information ---------------
|      oref value:  2 
|      class name: User.T2
|             OID: ( 2 ,"User.T2")
| reference count:  2  (system),  2  (user)
+----------------- attribute values ------------------
| (%Concurrency) =  1 
|    (%IsInSave) =  0 
|             a1 = ""
+----------------- swizzled references ---------------
|           (none)
+-----------------------------------------------------

Находите желаемый объект , например с ID=2 ( строка содержит OID: (2,"User.T2") ) - оттуда выбираете верхнюю строку oref value: 2 - и соотвественно потом ищете все в тела остальных объектов ссылки вхождения "2@User.T2"....

В принципе если взять у каратаева перехватчик ввода вывода - то можно сделать автомат - дамп сбросить в файл или глобал и потом его пропарсить.
...
Рейтинг: 0 / 0
21.02.2008, 11:54
    #35146879
=Dimon=
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать объекты ссылающиеся на нужный объект
2Ptn Спасибо, за подробный ответ! :)
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как узнать объекты ссылающиеся на нужный объект / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]