Asseracje w pawn

Do czego służą asseracje można znaleźć na wielu stronach np. W zasadzie w pawnie służą one do tego samego co wszędzie czyli do debugowania. Mamy nawet dwa dostępne typy asseracji
  • Pierwszy z nich to dyrektywa preprocesora w postaci
    #assert constant expression
    Warunek jest sprawdzany podczas kompilacji Przykład
    #include 
    
    public plugin_init()
    {
    #assert 1 == 2
    }
    i komunikat
     fatal error 110: assertion failed: 1 == 2
    lub
    #include 
    
    const constVariable = 2;
    
    public plugin_init()
    {
    #assert constVariable == 1
    }
    komunikat
    fatal error 110: assertion failed: constVariable == 1
  • Drugi typ asseracji to aseracje sprawdzane podczas działania pluginu. Używamy tutaj instrukcji
    assert wyrażenie
    Należy pamiętać że podczas testowania kodu z asseracjami należy załadować plugin w trybie debug inaczej przy warunku w asseracji który zwróci false nasz serwer zaliczy crasha 😉 Przykład użycia
    #include 
    #include 
    
    #define PLUGIN	"New Plugin"
    #define AUTHOR	"DarkGL"
    #define VERSION	"1.0"
    
    public plugin_init()
    {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    new testVariable = 1;
    
    assert testVariable < 0
    }
    i komunikat w logach
    [AMXX] Displaying debug trace (plugin "assertTest3.amxx")
    [AMXX] Run time error 2: assertion failed 
    [AMXX]    [0] assertTest3.sma::plugin_init (line 14)
    Możemy tu podawać dowolne warunki ale zgodnie z zasadami opisanymi w linkach na początku wpisu. Asseracji w kodzie który chcemy opublikować ( a raczej w jego skompilowanej wersji ) pozbywamy się poprzez dołaczenie do parametrów kompilacji opcji -d1 lub -d0 ( http://darkgl.pl/index.php/2013/08/19/optymalizacja-dzialania-pluginow-poprzez-parametry-kompilacji/
Nie ma co ukrywać że modyfikacja parametrów kompilacji nie jest najprzyjemniejszym sposobem szczególnie jeśli udostępniamy nasz kod publicznie 😉 Dlatego napisałem mały plik inc który pozwala na wyłączanie mechanizmu asseracji za pomocą definiowania makra preprocesora Udostępnia on dwa makra
  • assert – ten sam efekt co drugi sposób asseracji opisany powyżej
  • shouldntReachHere – plugin nie powinien dotrzeć do tego miejsca w kodzie następuje natychmiastowy „wyrzut” błędnej asseracji do logów
Same asseracje wyłączamy dodając taką o to definicję przed include pliku assert.inc
#define NDEBUG
Przykład użycia
#include 
#include 

#define PLUGIN	"New Plugin"
#define AUTHOR	"DarkGL"
#define VERSION	"1.0"

#include 

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

new n = 1;

assert( n < 0 )
}
i przykład gdzie asseracje są wyłączone
#include 
#include 

#define PLUGIN	"New Plugin"
#define AUTHOR	"DarkGL"
#define VERSION	"1.0"

#define NDEBUG
#include 

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

new n = 1;

assert( n < 0 )
}
oraz shouldntReachHere
#include 
#include 

#define PLUGIN	"New Plugin"
#define AUTHOR	"DarkGL"
#define VERSION	"1.0"

#include 

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

shouldntReachHere()
}
assert.inc Download

Jeden komentarz o “Asseracje w pawn

Dodaj komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.