Debug-Code live ins ZWave-Modul einschleusen

Begonnen von buspirat, 25 November 2016, 23:18:50

Vorheriges Thema - Nächstes Thema

buspirat

Hallo Zusammen,

möchte man live Debug-Code ins ZWave Modul einschleusen,
dann geht das mit einer einmaligen Änderung + Neustart von fhem.

Man sucht sich die zu untersuchende Funktion, z.B. ZWave_secEnd(), und fügt folgenden Code ein:


  my $filename_debug = '/tmp/inject_fhem.pl';
  if (-f $filename_debug) {
    # variables you want to pass
    # they will be available in the scope of the executed code snippet
    local @ARGV = $hash;

    unless (my $return = do $filename_debug) {
      Log3 $ioName, 1, "couldn't parse $filename_debug: $@" if $@;
      Log3 $ioName, 1, "couldn't do $filename_debug: $!"    unless defined $return;
      Log3 $ioName, 1, "couldn't run $filename_debug"       unless $return;
      # Log3 $hash->{NAME}, 1, "couldn't parse $filename_debug: $@" if $@;
      # Log3 $hash->{NAME}, 1, "couldn't do $filename_debug: $!"    unless defined $return;
      # Log3 $hash->{NAME}, 1, "couldn't run $filename_debug"       unless $return;
    }
  }


Name der Variabeln ggf. anpassen.

Die Datei "/tmp/inject_fhem.pl" sieht testweise so aus:

use Data::Dumper;
use strict;
my $hash = $_[0];
Log3 $hash->{NAME}, 1, Dumper($hash);
1;


Damit kann man bei einem laufenden Kommunikationsproblem den Debug-Code beliebig anpassen, ohne fhem neu zu starten.

Wichtig ist dabei, daß man die zu "exportierenden" Variablen in das @ARGV Array einträgt. Das schränkt leider den Nutzen ein wenig ein.

VG,
Thomas

rudolfkoenig

Das geht auch einfacher: Modul aendern und reload.

A.Harrenberg

Hi Rudi,

aber beim Reload vom Modul wird doch alles mögliche zurückgesetzt und neu initialisiert, oder doch nicht?

Hier ging es ja genau darum den Debug-Code anzupassen OHNE was zurückzusetzen, da nach dem Neustart der Fehler ja weg ist.

Gruß,
Andreas.
FB 7360, Homematic und ZWave
Support for ZWave-SECURITY

rudolfkoenig

reload liest die Datei ein, und ruft XXX_Initialize() auf. Soweit ich sehe, setzt ZWave_Initialize nichts zurueck, und auch die Definition der Modul-globalen Variablen sind harmlos.
Ich mache das regelmaessig mit meinem Produktions-FHEM, wenn ich auf einem Feature scharf bin. Man muss natuerlich die Zusammenhaenge kennen, und das Modul darf sich nicht auf Aenderungen in fhem.pl verlassen.

A.Harrenberg

Hi Rudi,

danke für die Klarstellung. Ich nutze meist auch nur das Reload, auch wenn ich meine Testumgebung recht schnell komplett neu gestartet habe.

Gruß,
Andreas.
FB 7360, Homematic und ZWave
Support for ZWave-SECURITY