Anwendung soll NUR in Entwicklungsumgebung im Debug-Modus starten

Meine Anwendung stellt mir im Debug-Modus bestimme Features bereit (zusätzliche Ausgaben, ungetestete Features, Autologin, etc).

Dies regele ich im Programm über eine methode, die true oder false zurückgibt (isDebug()).

Nun möchte ich vermeiden, dass ich im Eifer eines Patches mal vergesse, das Flag im Quellcode auf false zu schalten. Somit würde der Kunde die Anwendung im Debug-Modus bekommen, was ich nicht möchte.

Kann ich mein Programm so bauen, dass sich der Debug-Modus automatisch “abschaltet”, wenn ich die Anwendung rausgebe. Im Moment gucke ich, ob an einem bestimmten Ort eine bestimmte Datei liegt. Aber das ist mir zu unsicher, da man dann ja nur die selbe Datei dorthinlegen müsste und schon würde die Anwendung ja wieder im Debug-Mode laufen. Welche Datei das ist, könnte man ja durch einfaches decompilieren herausfinden.

Daher meine Frage: Gibts irgendeine Variante, mit der folgende Methode bei mir auf dem Entwicklungs-PC “true” aber sonst “false” zurück gibt:

   return /*???*/;
}```

Bei allen denkbaren Varianten wäre es möglich, dass ein böswilliger Nutzer herausfindet, wie er die Umgebung so hinbiegt, dass Dein Programm denkt, es liefe auf der Entwicklungsumgebung. Wirklich sicher vermeiden kannst du das nur, indem du die Debug-Funktionen in ein eigenes jar auslagerst, dass Du nicht mit auslieferst. Ein guter Kompromiss könnte sein, die IP-Adresse zu überprüfen. Die kann der böswillige Nutzer zwar auch ändern, hätte dann aber das Problem, dass sein Rechner Netzwerkverbindungen nicht mehr richtig nutzen kann.

Verwendest du ein Build-Tool? Eigene Release-Konfiguration erstellen, wär nicht weiter schwer.

In der IDE einfach eine geheime Umgebungsvariable beim Aufruf mitgeben (‘Run’-Konfiguration), könnte ein späterer Anwender nur durch disassemblieren raus finden.

So etweas macht man in der Konfiguration, niemals im Code.
Das ist nichtmal “Best Practice”, sondern schlicht standard.

Verwende sowas wie maven, da kannst du beim bauen mit verschiedenen Profilen arbeiten

Mal davon abgesehen, dass ich unter “im debug-Modus starten”
was anderes verstehe,
[spoiler]nämlich, dass ich der VM diese Parameter mitgebe:
pacsDebugOptions=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n[/spoiler]
Ich würde das auch über eine Properties-Datei machen, die ich nicht mit ausliefere (maven kann sowas ausfiltern oder es liegt in einem zusätzlichen src-Ordner den maven nicht kennt…

Wenn man dass absichern will kann man ja da noch etwas geheimes reinschreiben, dass sich regelmäßig ändert und vom Programm selbst geprüft wird, falls die Datei da ist.

bye
TT