| 03-22-2007, 10:42 PM | #1 |
I ran grimiore on my map to help find the trigger causing it to crash. After the crash i had an error log file which contained the following but i dont know how or where to start looking for the bug. Can anyone help? A copy of the map can be given if needed. war3err.conf not found Loading war3err.conf: bytecodetrace = off nopause = on Register natives signature found at: 6f2ab130 symtable offset: 2854 War3_497: 4400c0 SMemAlloc: 15027db0 SStrHashHT: 1503bfa0 NativeStrGet: 6f2b0b30 strget: 6f6a2000 getnativestruct: 6f6a2030 char_to_cache: 6f6b1ca0 cache_to_nstr: 6f6b1c80 OpLimit signature found at: 6f6b85fd 10003986 10003980 DivZero signature found at: 6f6b8669 VarUse signature found at: 6f6b8624 Op signature found at: 6f6b76e5 nativename: Player hooknative: 100020a0 hooknativedata: 83e58955 nativenameaddr: 6f818a8c regaddr: 6f2ae0ce war3_native: 6f2cffa0 nativename: CreateGroup hooknative: 10001ede hooknativedata: 83e58955 nativenameaddr: 6f81aa98 regaddr: 6f2ac95e war3_native: 6f2bc970 nativename: DestroyGroup hooknative: 10001f08 hooknativedata: 83e58955 nativenameaddr: 6f81aa7c regaddr: 6f2ac972 war3_native: 6f2bca20 Location: 6f2b0d97 nativename: RemoveLocation hooknative: 10001d02 hooknativedata: 83e58955 nativenameaddr: 6f81c004 regaddr: 6f2aba9a war3_native: 6f2b0da0 nativename: ExecuteFunc hooknative: 100015da hooknativedata: 83e58955 nativenameaddr: 6f815638 regaddr: 6f2b0356 war3_native: 6f2e2280 Pause patch signature found at: 6f0f5799 game.dll patched successfully Waited for 0 before letting RegisterNatives run |
| 03-22-2007, 10:45 PM | #2 |
That's nto a crash log. check bytecode.log and make sure war3err.dll is loaded --- You are missing war3err.conf, make it look like this: war3err.conf:
bytecodetrace = on nopause = off Then run the map again, make it crash, bytecode.txt will contain the last function called. Also make sure you have the correct logd.exe |
| 03-24-2007, 12:43 PM | #3 |
Ok got something but it a little long. How do i read it to get useful information for debugging the code? jN :: 0 0 46 0x14:setreg 0 jN :: 45 46 46 0x20:add 0 jN :: 0 0 46 0x11:setvar 92:i jN :: 0 0 0 0x28:jump dest 3134 jN :: 0 0 0 0x2b:unknown 3111 jN :: 0 4:integer 7 0xe:getvar 8508:jQ jN :: 0 0 7 0x13:push 0 jN :: 0 4:integer 8 0xc:literal 0 jN :: 0 0 9 0x14:setreg 0 jN :: 8 9 9 0x1b:unknown 0 jN :: 0 0 9 0x29:jump if true 3112 jN :: 0 4:integer 47 0xe:getvar 8508:jQ jN :: 0 0 47 0x13:push 0 jN :: 0 0 0 0x15:callnative 916:GetSpellTargetUnit jN :: 0 0 0 0x13:push 0 jN :: 0 0 0 0x16:callfunc 2817:UnitAddItemByIdSwapped UnitAddItemByIdSwapped :: 0 2 4:integer 0x8:pop 1023:itemId UnitAddItemByIdSwapped :: 0 1 7:handle 0x8:pop 1113:whichHero UnitAddItemByIdSwapped :: 0 4:integer 66 0xe:getvar 1023:itemId UnitAddItemByIdSwapped :: 0 0 66 0x13:push 0 UnitAddItemByIdSwapped :: 0 7:handle 67 0xe:getvar 1113:whichHero UnitAddItemByIdSwapped :: 0 0 67 0x13:push 0 UnitAddItemByIdSwapped :: 0 0 0 0x15:callnative 1180:GetUnitX UnitAddItemByIdSwapped :: 0 0 0 0x13:push 0 UnitAddItemByIdSwapped :: 0 7:handle 68 0xe:getvar 1113:whichHero UnitAddItemByIdSwapped :: 0 0 68 0x13:push 0 UnitAddItemByIdSwapped :: 0 0 0 0x15:callnative 1181:GetUnitY UnitAddItemByIdSwapped :: 0 0 0 0x13:push 0 UnitAddItemByIdSwapped :: 0 0 0 0x15:callnative 999:CreateItem UnitAddItemByIdSwapped :: 0 0 0 0x11:setvar 2460:bj_lastCreatedItem UnitAddItemByIdSwapped :: 0 7:handle 69 0xe:getvar 1113:whichHero UnitAddItemByIdSwapped :: 0 0 69 0x13:push 0 UnitAddItemByIdSwapped :: 0 7:handle 70 0xe:getvar 2460:bj_lastCreatedItem UnitAddItemByIdSwapped :: 0 0 70 0x13:push 0 UnitAddItemByIdSwapped :: 0 0 0 0x15:callnative 1163:UnitAddItem The code i THINK that it crashed on. JASS:function Trig_Tower_Modules_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A036' endfunction function Trig_Tower_Modules_Actions takes nothing returns nothing local integer array ModuleWeapon local integer array ModuleRadar local integer array ModuleTroop local integer array ModuleHeal local integer array ModuleHP local integer i local integer Slot local integer Module local integer SkillLevel = GetUnitAbilityLevel(GetTriggerUnit(), 'A036') local boolean TargetHasModuleWeapon = false local boolean TargetHasModuleRadar = false local boolean TargetHasModuleTroop = false local boolean TargetHasModuleHeal = false local boolean TargetHasModuleHP = false local boolean ValidModule = false if UnitInventoryCount(GetSpellTargetUnit()) != 6 and GetUnitAbilityLevel(GetSpellTargetUnit(), 'A03P') == 1 then set ModuleWeapon[1] = 'I03R' set ModuleWeapon[2] = 'I044' set ModuleWeapon[3] = 'I045' set ModuleWeapon[4] = 'I046' set ModuleWeapon[5] = 'I047' set ModuleRadar[1] = 'I04F' set ModuleRadar[2] = 'I04G' set ModuleRadar[3] = 'I04H' set ModuleRadar[4] = 'I04I' set ModuleRadar[5] = 'I04J' set ModuleTroop[1] = 'I03Q' set ModuleTroop[2] = 'I040' set ModuleTroop[3] = 'I041' set ModuleTroop[4] = 'I042' set ModuleTroop[5] = 'I043' set ModuleHeal[1] = 'I03Y' set ModuleHeal[2] = 'I03Z' set ModuleHeal[3] = 'I03P' set ModuleHeal[4] = 'I03W' set ModuleHeal[5] = 'I03X' set ModuleHP[1] = 'I03V' set ModuleHP[2] = 'I03U' set ModuleHP[3] = 'I03T' set ModuleHP[4] = 'I03S' set ModuleHP[5] = 'I03O' set Slot = 1 loop exitwhen Slot > 6 set Module = GetItemTypeId(UnitItemInSlotBJ(GetSpellTargetUnit(), Slot)) set i = 1 loop exitwhen i > 5 if Module == ModuleWeapon[i] then set TargetHasModuleWeapon = true endif if Module == ModuleTroop[i] then set TargetHasModuleTroop = true endif if Module == ModuleHeal[i] then set TargetHasModuleHeal = true endif if Module == ModuleHP[i] then set TargetHasModuleHP = true endif if Module == ModuleRadar[i] then set TargetHasModuleRadar = true endif set i = i + 1 endloop set Slot = Slot + 1 endloop if not (TargetHasModuleWeapon and TargetHasModuleTroop and TargetHasModuleHeal and TargetHasModuleHP and TargetHasModuleRadar) then set Module = 0 set i = GetRandomInt(1, 5) loop exitwhen Module != 0 if i == 1 and not TargetHasModuleWeapon then set Module = ModuleWeapon[SkillLevel] endif if i == 2 and not TargetHasModuleTroop then set Module = ModuleTroop[SkillLevel] endif if i == 3 and not TargetHasModuleHeal then set Module = ModuleHeal[SkillLevel] endif if i == 4 and not TargetHasModuleHP then set Module = ModuleHP[SkillLevel] endif if i == 5 and not TargetHasModuleRadar then set Module = ModuleRadar[SkillLevel] endif if i == 5 then set i = 1 else set i = i + 1 endif endloop call UnitAddItemByIdSwapped( Module, GetSpellTargetUnit() ) else call IssueImmediateOrder( GetTriggerUnit(), "stop" ) call DisplayTextToForce( GetForceOfPlayer(GetOwningPlayer(GetTriggerUnit())), "|cfffed312The target has already modules of all types.|r" ) call TriggerSleepAction ( 0 ) call SetUnitManaBJ( GetTriggerUnit(), ( GetUnitStateSwap(UNIT_STATE_MANA, GetTriggerUnit()) + I2R(5 * SkillLevel)) ) endif else call IssueImmediateOrder( GetTriggerUnit(), "stop" ) call DisplayTextToForce( GetForceOfPlayer(GetOwningPlayer(GetTriggerUnit())), "|cfffed312The target has to have an empty inventory slot.|r" ) call TriggerSleepAction ( 0 ) call SetUnitManaBJ( GetTriggerUnit(), ( GetUnitStateSwap(UNIT_STATE_MANA, GetTriggerUnit()) + I2R(5 * SkillLevel) ) ) endif endfunction //=========================================================================== function InitTrig_Tower_Modules takes nothing returns nothing set gg_trg_Tower_Modules = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Tower_Modules, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Tower_Modules, Condition( function Trig_Tower_Modules_Conditions ) ) call TriggerAddAction( gg_trg_Tower_Modules, function Trig_Tower_Modules_Actions ) endfunction |
| 03-24-2007, 11:40 PM | #4 |
From the look at the bottom of the bytecode, my guess is that it crashed when calling the UnitAddItemByIdSwapped function. I think that would be obvious enough as the last lines of code contain the text: "UnitAddItemByIdSwapped". Try commenting out that function where found and see if the code will run without crashing. By the way, did you really need to paste the entire file's contents into a thread? You could have attached a file. |
| 03-24-2007, 11:49 PM | #5 |
Yeah i figured as much but does it tell me if one of the variables passed into that function are pointing to null or 0? Yeah sorry bout that. |
| 03-26-2007, 01:59 AM | #6 |
Unfortunately grimoire does not watch variable contents. You can add debug messages now, though. |
