Dagens tips 20170505

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Dagens tips 20170505

Inlägg av Icecap »

Jag jobbar mycket ofta med att debugga via en seriell port eller utskrifter på ett Memo, allt beroende på vilket system jag programmerar på.

Mycket ofta ska man kolla lite interna värden för att se var det skiter sig och rimligt ofta använder jag en systemvariabel:
#define DEBUG_PRINTOUT true

Andra ställen blir det så:
#if DEBUG_PRINTOUT
// Skriva ut något värde/status
#endif // DEBUG_PRINTOUT

Men ibland blir det mycket med alla utskrifter så jag har börjat (sedan ett bra tag) med att göra följande:

Kod: Markera allt

#define DEBUG_THIS true
int Some_Function(int Some_Value)
  {
  ...
  }
#undef DEBUG_THIS
I koden gör jag sedan som ovan och när en rutin är skottsäker är det bara att ända DEBUG_THIS till false och då försvinner den rutin från debugutskriften. På det vis kan jag vara selektiv i utskriften på ett överskådligt sätt.

Man kan såklart kombinera med en total DEBUG-definition så att bara när den totala är true kan de andra vara det samma.
Då kan man slå på debug för dels rutin for rutin och dels globalt.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Dagens tips 20170505

Inlägg av johano »

Utmärkt tråd!

Mitt bidrag är när man kodar i python så har man ofta någon modul med inställningar, jag kallar den ofta settings.py.

Problemet är att man ofta vill ha en del inställningar "globala", d.v.s. som gäller både i produktion (server) och i lokal utvecklingsmiljö
och en del inställningar "lokala" (som t.ex. sökvägar till lokala kataloger o.dyl.)
Samma problem uppstår också om man är fler än en utvecklare i samma projekt och inte vill ha exakt samma inställningar till
t.ex. databasen, sökvägar till filer, kontouppgifter till mailservrar et.c.

För att lösa detta kör vi numer konsekvent med suffixet "_local.py" för lokala filer och låter dessa "överlagra" den globala filen
genom att de (försöker) importeras i den globala filen på följande sätt:

Kod: Markera allt

# settings_local.py

# ...
# lots of settings
# ...

BASE_URL = "https://my.server.com/"

try:
    from settings_local import *

except ImportError:
    pass # gulp

Kod: Markera allt

# settings_local.py
BASE_URL = "http://127.0.0.1:8001"

Använder man sen Git för källkodshantering är det enkelt att lägga till en regel i sin .gitignore att strunta i alla filer med suffixet _local så hålls de endast i den lokala mijön.

/johan
Skriv svar