Главная XFuncs smartGC InsiderTools Скачать Tutorials Купить Письма
 
Документация  

Обзор
Документация

Аспектно-
ориентированное API

What's new?



 

 

Оглавление

Инициализация insiderTools
API для фатальных ошибок
API для стека вызовов

Расширенная информация об использованной памяти

Инициализация insiderTools

Специальной инициализации для InsiderTools не требуется. Если вы хотите использовать обработчик фатальных ошибок, вставьте эту строку где-нибудь в начале программы:

insider():installHandlers()



API для фатальных ошибок

Это API выводит обработку исключений и фатальных ошибок на профессиональный уровень. В отличии от стандартного xppfatal.log, в файл выводится вся возможная инфомация. еще о файле>

::installHandlers()

инициализация обработчика фатальных ошибок

::setErrorPath(pathName) -> oldPath

установка пути для хранения файлов с фатальными ошибками. По умолчанию, это папка с главным .exe файлом.

::setErrorName(fileName) -> oldName

установка имени для файла фатальных ошибок. По умолчанию, "xppCrash.log"

 

API для стека вызовов

::procParamA(nCallStack,nThreadId) -> paramsArr

возвращает параметры функции из стека вызовов в виде массива

::procParam(nCallStack,nIndex,nThreadId) -> paramValue

возвращает конкретный параметр функции из стека вызовов

::procParamCount(nCallStack,nThreadId) -> numParams

возвращает количество параметров у функции из стека вызовов


::procBlock
(nCallStack,nThreadId) -> codeblock|NIL

возвращает действительный блок кода для вызова блока кода

::procObject(nCallStack,nThreadId) -> object|NIL

возвращает действительный объект для вызова метода

  пример вывода стека вызовов
 

Local i
..
Local args    
Local block
Local object
..
//этот цикл взят из стандартного ErrorSys.prg
i := nStackStart
DO WHILE ! Empty( ProcName(++i) )
    ? EHS_CALLED_FROM, Trim( ProcName(i) ) + "(" + ;
     LTrim( Str( ProcLine(i) ) ) + ")"

    //эти строки выводят дополнительную информацию
    //об элементе стека вызовов
    args:= insider():procParamA(i)
    block:= insider():procBlock(i)
    object:= insider():procObject(i)

    If block!=NIL
       ?" block="+Var2Char(block)
    End
    If object!=NIL
       ?" object="+Var2Char(object)
    End
    If Len(args)>0
       ?"   args="+Var2Char(args)
    End

ENDDO
?

 

Расширенная информация об использованной памяти (класс XppMemoryInfo)

Язык программирования Xbase++ объектно-ориентированный, не типизированный, с поддержкой многопоточности. Эти возможности неизбежно влекут сложную внутреннюю организацию среды запуска языка.

Мы попытались привести в порядок наше знание о недокументированных структурах и выделили наиболее интересную информацию в специальный класс
XppMemoryInfo().

Чтобы получить информацию о памяти, вызовите insider():getMemorySnapshot(). Этот вызов возвращает объект типа XppMemoryInfo.


Переменные уровня языка Xbase++

::varStat

статистика об использованных переменных, сгруппированная по типу и виду доступа. Эта переменная содержит массив массивов по два элемента на каждый тип. Первый элемент это количество использованных переменных такого типа, а второй это количество ссылок на переменные такого типа. Типы расположены в ::varStat в порядке ABCDLMNOU.

  пример

        


//вывод использованных типов переменных
types:="ABCDLMNOU"

With insider():getMemorySnapshot()
  a:=:::varStat

  For i:=1 To Len(types)
    ?types[i]+"=",a[i,1]," (+",a[i,2],"ссылок)"
  Next
EndWith

::objects

содержит список использованных объектов, сгруппированных по классам. Первый элемент это имя класса, второй -- количество использованных объектов этого класса.

  пример

        


//вывод использованных объектов
With insider():getMemorySnapshot()
  a:=:::objects

  For i:=1 To Len(a)
    ?"имя класса=",a[i,1]," кол-во=",a[i,2]
  Next
EndWith

::variables

содержит общее количество использованных переменных языка Xbase++. ВНИМАНИЕ: ссылки не входят, так же сюда не входят простые типы хранящиеся в массивах или объектах.

::inArrays

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

::inObjects

как и массивы, объекты хранят свои переменные в отдельной области памяти. Эта переменная является количеством переменных во всех использованных объектах.


Переменные уровня реализации (внутренняя информация)

::allocedMemory

общий размер (включая свободное место) таблицы momHandles. Эта таблица хранит значения всех переменных. Чтобы посчитать размер использованной памяти, вычтите ::freeMemory из этой переменной.

::freeMemory

размер свободной памяти в таблице momHandles.

::totalMomObjs

общее количество momObj, специальных структур, обрабатываемых сборщиком мусора. Чаще всего, momObj является ссылкой на переменную языка Xbase++. Например, при вызове функций _con*() из C-Api, ContainerHandle указывает на некоторую структуру momObj.

::freeMomObjs

количесво свободных momObj.


Другие функции

insider():getVarRefs(var) -> nRefCount

возвращает количество ссылок на проверяемую переменную. Этот вызов имеет значение только для массивов и объектов.

  пример

        


//проверим количество ссылок на arr
arr:={1}
holdArr:={arr,arr,arr}

? insider():getVarRefs(arr)
     //выводит 4, т.е. arr сам
     //плюс 3 ссылки в holdArr




©2006 Eleus Software

 

Hosted by uCoz