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

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

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

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

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

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

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

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

Если вы хотите это выполнять в рунтайм - то как уже советовали $System.OBJ.Dump([var]) и возможно некоторые $zobjxxx функции....
...
Рейтинг: 0 / 0
Как узнать объекты ссылающиеся на нужный объект
    #35143542
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое OnOpen ?
...
Рейтинг: 0 / 0
Как узнать объекты ссылающиеся на нужный объект
    #35144873
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
Как узнать объекты ссылающиеся на нужный объект
    #35146879
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Ptn Спасибо, за подробный ответ! :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как узнать объекты ссылающиеся на нужный объект
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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