XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
Определение утечек по подсчёту хэндлов
Собственно как это сделать(отловить утечки)?
Желательно на примере,скрин прилагаю
Старый 16.11.2009, 21:32
ScorpioT1000
Работаем
offline
Опыт: отключен
смысл? открываешь диспетчер задач и получаешь свой фейл
Старый 16.11.2009, 22:00
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
ScorpioT1000, когда динамическая игра,с кучей экшена,нету времени свернуть игру и залезть в диспетчер задач )
Старый 16.11.2009, 22:07
ScorpioT1000
Работаем
offline
Опыт: отключен
так надо в окне запускать вобщето)
Старый 16.11.2009, 22:35
agentex

offline
Опыт: 34,534
Активность:
DragonSpirit, периодически ченить создаешь и выводишь на экран I2S(GetHandleId()). токо вроде для каждого типа обьектов свой диапазон адресов, и это может усложнить задачу
Старый 16.11.2009, 22:50
YellowStar
poon
offline
Опыт: 15,144
Активность:
Define на нужные функции. Делаем в целом хук функции и записываем количество объектов. Также можно примерно расчитать количество съедаемои оперативы.
За эффект - 13.61 кило.
За локацию - 0.361 кило.
За группу - 0.62 кило плюс 0.04 кило за юнита в группе.
Старый 17.11.2009, 01:52
NCrashed

offline
Опыт: 13,553
Активность:
function Trig_Leaks_Actions takes nothing returns nothing
local timer t = CreateTimer()
    call BJDebugMsg(I2S(GetHandleId(t)))
    call DestroyTimer(t)
set t = null
endfunction

//===========================================================================
function InitTrig_Leaks takes nothing returns nothing
    set gg_trg_Leaks = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Leaks, function Trig_Leaks_Actions )
    call TriggerRegisterTimerEvent( gg_trg_Leaks , 1 , true)
endfunction
Старый 17.11.2009, 17:23
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
NCrashed, у меня этот код есть )
мне надо научиться определять утечки
Старый 17.11.2009, 18:19
Тюлень
Kicked by ZlaYa1000
offline
Опыт: 26
Активность:
Если карта начинает глючить через 10 мин - утечки точно есть. Иначе поможет только анализ кода, который пишешь.
Старый 17.11.2009, 18:32
BK.Jugg
террорист из КиП
offline
Опыт: 26,966
Активность:
Тюлень, не обязательно. Бывает тонна утечек, хотя мапа сама не сильно глючит.
Цитата:
смысл? открываешь диспетчер задач и получаешь свой фейл
Старый 17.11.2009, 18:40
agentex

offline
Опыт: 34,534
Активность:
мне надо научиться определять утечки
аа находить их в коде я так понимаю?
Старый 17.11.2009, 18:47
SRes
1110101000
offline
Опыт: 9,997
Активность:
DragonSpirit, http://xgm.guru/forum/showpost.php?p=692000&postcount=6
Почитай мое скромное мнение.
Старый 17.11.2009, 20:54
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
аа находить их в коде я так понимаю?
нет,сам код чистый
проверял без кнокбэка - число доходило до 200 и возвращалось на исходную,а с кнокбэком скакало как бешеное(по скрину видно)
тест с помощью диспетчера задач показал следующее:
без кнокбэка как было 90к кб,так и осталось
с кнобэком(включая эффекты)поднялось с 90к до 95к кб
хотя с эффектом приземления поднялось на 1к кб

Отредактировано DragonSpirit, 17.11.2009 в 21:48.
Старый 17.11.2009, 21:41
BK.Jugg
террорист из КиП
offline
Опыт: 26,966
Активность:
DragonSpirit, если очень сильно скачет - 100% утечки.
попробуй спелл переписать на cJass/vJass чтоль, убрав БЖшки и прочую хрень, потом проверить
Старый 17.11.2009, 21:46
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
BK.Jugg, сам код на нативках,кроме 1-й функции
Старый 17.11.2009, 21:50
SRes
1110101000
offline
Опыт: 9,997
Активность:
Значит в другом месте дырки. Не в утечках, добавляй дебаг сообщения.
Старый 17.11.2009, 21:50
agentex

offline
Опыт: 34,534
Активность:
вы вкурсе что простой вывод на экран месагов это утечки?
Старый 17.11.2009, 21:52
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
» Код спелла
library BG initializer Init

private function Trig_Ball_Conditions takes nothing returns boolean
return GetSpellAbilityId()==0x41303030
endfunction

private function Trig_Ball_Actions takes nothing returns nothing
local unit Caster=GetSpellAbilityUnit()
call UnitAddAbility(Caster,0x416D7266)
call UnitRemoveAbility(Caster,0x416D7266)
call SetUnitFlyHeight(Caster,200.,300.)
call TriggerSleepAction(.5)
call SetUnitFlyHeight(Caster,0.,500.)
call TriggerSleepAction(.3)
 if TriggerEvaluate(gg_trg_Knockback) then
    call TriggerExecute(gg_trg_Knockback)
 endif
set Caster = null
endfunction

private function Init takes nothing returns nothing
local integer i=0x00
local trigger t=CreateTrigger()
loop
exitwhen i>0x0f
call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_CAST,null)
set i=i+1
endloop
call TriggerAddCondition(t,Condition(function Trig_Ball_Conditions))
call TriggerAddAction(t,function Trig_Ball_Actions)
set t=null
endfunction

endlibrary
» Либа кнокбэка
library KnockbackSystem initializer Init

private struct Struct
 unit u
 real a
 real r
 real s
 string e1
 string e2
 real c1
 real c2
 boolean w
 boolean dt
 real dtr
endstruct

private function True takes nothing returns boolean
 return true
endfunction

globals
 private integer Total = 0
 private real Period = 0.05
 private timer Timer = CreateTimer()
 private Struct array StructA
 private filterfunc link = null
endglobals

private function DestroyTree takes nothing returns nothing
 call KillDestructable(GetFilterDestructable())
endfunction

private function CoordsInMapArea takes real x, real y returns boolean
 return (GetRectMinX(bj_mapInitialPlayableArea)<=x)and(x<=GetRectMaxX(bj_mapInitialPlayableArea))and(G​etRectMinY(bj_mapInitialPlayableArea)<=y)and(y<=GetRectMaxY(bj_mapInitialPlayableArea))
endfunction

private function Motion takes nothing returns nothing
 local Struct data
 local integer i = 0
 local real ux=0.
 local real uy=0.
 local real tx=0.
 local real ty=0.
 local real cx=0.
 local real cy=0.
 local rect r

 loop
 exitwhen i>=Total
 set data=StructA[i]

 set ux=GetUnitX(data.u)
 set uy=GetUnitY(data.u)
 if CoordsInMapArea(ux,uy) and data.s>0 then

 set data.s=data.s-data.r
 if data.w == true then 
 call SetUnitX(data.u,GetUnitX(data.u)+data.s*Cos(data.a*bj_DEGTORAD))
 call SetUnitY(data.u,GetUnitY(data.u)+data.s*Sin(data.a*bj_DEGTORAD))
 else
 call SetUnitPosition(data.u,GetUnitX(data.u)+data.s*Cos(data.a*bj_DEGTORAD),GetUnitY(data.u)+data.s*Sin(d​ata.a*bj_DEGTORAD))
 endif

 if data.e1 != "" and GetRandomReal(0.,100.)<=data.c1 then
 call DestroyEffect(AddSpecialEffect(data.e1,GetUnitX(data.u),GetUnitY(data.u))) 
 endif
 if data.e2 != "" and GetRandomReal(0.,100.)<=data.c2 then
 call DestroyEffect(AddSpecialEffect(data.e2,GetUnitX(data.u),GetUnitY(data.u))) 
 endif
 
 if data.dt == true and data.dtr > 0. then
  set cx=GetUnitX(data.u)
  set cy=GetUnitY(data.u)
  set r=Rect(cx-data.dtr,cy-data.dtr,cx+data.dtr,cy+data.dtr)
  call EnumDestructablesInRect(r,link,function DestroyTree)
  call RemoveRect(r)
  set r=null
 endif
 
 else
 call data.destroy()
 set Total=Total-1
 set StructA[i]=StructA[Total]
 set i=i-1
 endif
 set i=i+1
 endloop

 if Total==0 then
 call PauseTimer(Timer)
 endif
endfunction

function KnockbackUnit takes unit u, real a, real ks, real rs, string e1, string e2, real c1, real c2, boolean w, boolean dt, real dtr returns nothing
 local Struct data = Struct.create()
 set data.u = u
 set data.a = a
 set data.r = rs
 set data.s = ks
 set data.e1 = e1
 set data.e2 = e2
 set data.c1 = c1
 set data.c2 = c2
 set data.w = w
 set data.dt = dt
 set data.dtr = dtr

 if Total==0 then
 call TimerStart(Timer,Period,true,function Motion)
 endif

 set StructA[Total]=data
 set Total=Total+1
endfunction

private function Init takes nothing returns nothing
 set link=Filter(function True)
endfunction
endlibrary
//===========================================================================
function InitTrig_Knockback_system takes nothing returns nothing
endfunction
» Вызов кнокбэка
globals
group g = CreateGroup()
string eff = "Abilities\\Spells\\Undead\\DarkRitual\\DarkRitualTarget.mdl"
real damage = 150.
endglobals

function Damage takes nothing returns nothing
    location loc1 = GetUnitLoc(GetTriggerUnit())
    location loc2 = GetUnitLoc(GetEnumUnit())
    call KnockbackUnit(GetEnumUnit(), 57.295827 * Atan2(GetLocationY(loc2) - GetLocationY(loc1), GetLocationX(loc2) - GetLocationX(loc1)),30.,.8,"",eff,0.,100.,true,true,120.)
    call UnitDamageTarget(GetTriggerUnit(), GetEnumUnit(), damage, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
    call RemoveLocation(loc1)
    set loc1 = null
    call RemoveLocation(loc2)
    set loc2 = null
endfunction

function Trig_Knockback_Actions takes nothing returns nothing
    location loc = GetUnitLoc(GetTriggerUnit())
    effect e
    set g = GetUnitsInRangeOfLocAll(450.,loc)
    call GroupRemoveUnit(g,GetSpellAbilityUnit())
    call ForGroup(g, function Damage )
    set e = AddSpecialEffectLoc( "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",loc )
    call DestroyEffect( e )
    call RemoveLocation(loc)
    set e = null
    set loc = null
endfunction

//===========================================================================
function InitTrig_Knockback takes nothing returns nothing
    set gg_trg_Knockback = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Knockback, function Trig_Knockback_Actions )
endfunction
Старый 17.11.2009, 21:53
agentex

offline
Опыт: 34,534
Активность:
и то что адреса скачут ничего не доказывает, даже если разница большая
if TriggerEvaluate(gg_trg_Knockback) then
call TriggerExecute(gg_trg_Knockback)
endif
параноидальная боязнь бж?
фиксь "вызов кнокбэка" на предмет точек и пробуй еще

Отредактировано agentex, 17.11.2009 в 22:06.
Старый 17.11.2009, 21:54
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
agentex, т.е скачёк адресов не всегда указывает на то,что есть утечки?
вы вкурсе что простой вывод на экран месагов это утечки?
О_О
параноидальная боязнь бж?
нет,привычка
Старый 17.11.2009, 21:55
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 03:32.