Execution Logger (0.3C version) -
JernejL - 22.10.2011
Recently i went thru a low level overhaul of the main gamemode that i work with, it is sometimes very difficult to monitor what a script is doing in background - i am sure that a lot of you spent many sessions placing and removing printf calls all around code while trying to debug complex bugs and issues in your scripts.
So i built this plugin, which logs all operative calls. This excludes the GetPlayerxxx, IsPlayerxxx and a few other functions on purpose, as the functions which retrieve data from sa-mp aren't as important as those that SET it - but you can recompile the plugin to see those (and the resulting spam) as well., the defines are in the plugin to do so.
The calls and data is all outputted to sa-mp console / server log, here is a example output:
Code:
[19:51:48] IsPlayerConnected (playerid = 349, result = 0);
[19:51:48] SetTimer (funcname = "RunWeatherTimer" interval = 1000 repeating = 1, result = 3);
[19:51:48] SetTimer (funcname = "CheckIRCCommand" interval = 1000 repeating = 1, result = 4);
[19:51:48] CreateMenu (title = "Spectator" columns = 2 x = 125.00000 y = 130.00000 col1width = 190.00000 col2width = 0.0 = 150.00000, result = MENU:1);
[19:51:48] SetMenuColumnHeader (menuid = MENU:1 column = 0 columnheader = "Action", result = 1);
[19:51:48] SetMenuColumnHeader (menuid = MENU:1 column = 1 columnheader = "Mouse + Keys", result = 1);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 0 menutext = "----------------------", result = 0);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 1 menutext = "----------------------", result = 0);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 0 menutext = "Previous player:", result = 1);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 1 menutext = "~k~~PED_LOCK_TARGET~", result = 1);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 0 menutext = "Next player:", result = 2);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 1 menutext = "~k~~PED_FIREWEAPON~", result = 2);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 0 menutext = "Change view:", result = 3);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 1 menutext = "~k~~PED_DUCK~", result = 3);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 0 menutext = "Exit spectator:", result = 4);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 1 menutext = "~k~~PED_JUMPING~", result = 4);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 0 menutext = "----------------------", result = 5);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 1 menutext = "----------------------", result = 5);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 0 menutext = " ", result = 6);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 1 menutext = " ", result = 6);
[19:51:48] AddMenuItem (menuid = MENU:1 column = 0 menutext = " Accept", result = 7);
[19:51:48] DisableMenuRow (menuid = MENU:1 row = 0, result = 1);
[19:51:48] DisableMenuRow (menuid = MENU:1 row = 1, result = 1);
[19:51:48] DisableMenuRow (menuid = MENU:1 row = 2, result = 1);
[19:51:48] DisableMenuRow (menuid = MENU:1 row = 3, result = 1);
[19:51:48] DisableMenuRow (menuid = MENU:1 row = 4, result = 1);
[19:51:48] DisableMenuRow (menuid = MENU:1 row = 5, result = 1);
[19:51:48] DisableMenuRow (menuid = MENU:1 row = 6, result = 1);
[19:51:48] CreateObject (modelid = 14548 X = 335.81201 Y = 1004.71997 Z = 1950.50000 rX = 13.00000 rY = 0.00000 rZ = 0.00000 DrawDistance = 0.0 = 0.00000, result = 1);
[19:51:48] CreateObject (modelid = 14548 X = -1343.31775 Y = -272.34680 Z = 300.57529 rX = 13.00000 rY = 0.00000 rZ = 46.81210 DrawDistance = 0.0 = 0.00000, result = 2);
[19:51:48] CreateObject (modelid = 14548 X = 282.26001 Y = 1076.01001 Z = 0.00000 rX = 13.00000 rY = 0.00000 rZ = 90.00000 DrawDistance = 0.0 = 0.00000, result = 3);
[19:51:48] CreateObject (modelid = 4847 X = -1117.63000 Y = 1483.83997 Z = 1.55000 rX = -8.00000 rY = 0.00000 rZ = -64.82000 DrawDistance = 0.0 = 0.00000, result = 4);
You can see that the output is pretty well detailed.
The calls can also include streamer plugin calls, as long as the plugin is set to be loaded after the streamer (put ExecLogger at the end of plugin server.cfg line), this also works with other plugins that call sa-mp natives.
With detailed list of calls you are sending to sa-mp, you can optimize your script better. It will help you find redundant calls, unused code, wrong data, etc.. it also works well in tandem with Zeex's crashdetect plugin - you can see which sa-mp natives were made before the crash, and that helps you locate the problem in your code when there is no crashdetect stack trace)
Thanks to: Zeex, BlueG.
Be advised, that this is a 0.3C version - it will probably work in 0.3D - it is not tested there, so try it but in theory it should work directly.
Download for windows:
http://www.mathpudding.com/topsecretsamp/ExecLogger.rar
Download for linux:
http://www.mathpudding.com/topsecret...gger_linux.rar
IF YOU DO NOT UNDERSTAND WHAT THIS PLUGIN DOES, DO NOT JUST INSTALL IT BLINDLY FOR NO GOOD REASON, ESPECIALLY ON A LIVE SERVER - THIS IS FOR LOCAL TESTING ONLY.
source code (copy into examples folder of Zeex's plugin SDK and compile with code::blocks or make):
http://www.mathpudding.com/topsecret...Logger_src.rar
Re: Execution Logger (0.3C version) -
RyDeR` - 22.10.2011
Nice work, will check it out.
Re: Execution Logger (0.3C version) -
Dark_Kostas - 22.10.2011
Quote:
Originally Posted by JernejL
i am sure that a lot of you spent many sessions placing and removing printf calls all around code while trying to debug complex bugs and issues in your scripts
|
Like 5 print(f) to a 10 line code; happened unlimited times!
Thanks for the plugin it will be really useful for debuging.
Re: Execution Logger (0.3C version) -
Whitetiger - 22.10.2011
nice, will use it.
Re: Execution Logger (0.3C version) -
wups - 22.10.2011
Doesn't log Get*** Functions(Well at least GetVehicleParams).
Re: Execution Logger (0.3C version) -
GangsTa_ - 22.10.2011
I didn't really understand, how this is going to be useful?
Re: Execution Logger (0.3C version) -
Ricop522 - 22.10.2011
Thanks, useful for me
Re: Execution Logger (0.3C version) -
raz0x - 22.10.2011
i need for linux!!
Re: Execution Logger (0.3C version) -
Hiddos - 22.10.2011
Quote:
Originally Posted by wups
Doesn't log Get*** Functions(Well at least GetVehicleParams).
|
Quote:
This excludes the GetPlayerxxx, IsPlayerxxx and a few other functions on purpose, as the functions which retrieve data from sa-mp aren't as important as those that SET it
|
OT: Looks great for debugging!
Re: Execution Logger (0.3C version) -
JernejL - 22.10.2011
Quote:
Originally Posted by wups
Doesn't log Get*** Functions(Well at least GetVehicleParams).
|
It's like that on purpose, the spam with those function is HUGE, but it's supported in plugin code and can be enabled if you recompile it.
Quote:
Originally Posted by GangsTa_
I didn't really understand, how this is going to be useful?
|
Are you a scripter?
raz0x: are you a linux scripter?
Linux build:
http://www.mathpudding.com/topsecret...gger_linux.rar
AW: Execution Logger (0.3C version) -
Meta - 22.10.2011
cool
Re: Execution Logger (0.3C version) -
SpiderWalk - 22.10.2011
Nice one!!!
Re: Execution Logger (0.3C version) -
Luis- - 22.10.2011
Looks awesome, going to try it soon!
Re: Execution Logger (0.3C version) - [L3th4l] - 22.10.2011
Nice job
Re: Execution Logger (0.3C version) -
Chaser98 - 23.10.2011
I love it!! Good job!
A suggestion: Maybe output the logs in a different file? Or at least make an option to do it? That way the server log doesn't have to be spammed, as many servers use the server_log file for other purposes such as catching rule breakers, which would be harder if the plugin spams it.
Re: Execution Logger (0.3C version) -
Scenario - 23.10.2011
Holy cow, this is awesome! THANKS!
Respuesta: Execution Logger (0.3C version) -
CrowClaws - 23.10.2011
I gonna use it
Re: Execution Logger (0.3C version) -
Snipa - 23.10.2011
Wow, really nice
Re: Execution Logger (0.3C version) -
Slice - 23.10.2011
This will come in handy. Thanks a bunch!
Re: Execution Logger (0.3C version) -
TheArcher - 23.10.2011
Pretty cool, i'm gonna try it out.