mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
98_fhemdebug: first version
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@12911 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
43752621a0
commit
08c8ef5f33
1
CHANGED
1
CHANGED
@ -1,5 +1,6 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- feature: 98_fhemdebug, to aid "Error: >< no TYPE" debugging.
|
||||||
- feature: 70_Jabber Added possibility to change componentname via
|
- feature: 70_Jabber Added possibility to change componentname via
|
||||||
attr JabberDomain
|
attr JabberDomain
|
||||||
- feature: 93_DbRep: function readingRename added, delEntries is able to
|
- feature: 93_DbRep: function readingRename added, delEntries is able to
|
||||||
|
124
FHEM/98_fhemdebug.pm
Normal file
124
FHEM/98_fhemdebug.pm
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
##############################################
|
||||||
|
# $Id$
|
||||||
|
package main;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
my $fhemdebug_enabled;
|
||||||
|
my $main_callfn;
|
||||||
|
|
||||||
|
sub
|
||||||
|
fhemdebug_Initialize($){
|
||||||
|
$cmds{"fhemdebug"}{Fn} = "fhemdebug_Fn";
|
||||||
|
$cmds{"fhemdebug"}{Hlp} = "{start|stop|status}";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub
|
||||||
|
fhemdebug_Fn($$)
|
||||||
|
{
|
||||||
|
my ($cl,$param) = @_;
|
||||||
|
|
||||||
|
if($param eq "enable") {
|
||||||
|
return "fhemdebug is already enabled" if($fhemdebug_enabled);
|
||||||
|
local $SIG{__WARN__} = sub { };
|
||||||
|
$main_callfn = \&CallFn;
|
||||||
|
*CallFn = \&fhemdebug_CallFn;
|
||||||
|
$fhemdebug_enabled = 1;
|
||||||
|
return undef;
|
||||||
|
|
||||||
|
} elsif($param eq "disable") {
|
||||||
|
return "fhemdebug is already disabled" if(!$fhemdebug_enabled);
|
||||||
|
local $SIG{__WARN__} = sub { };
|
||||||
|
*CallFn = $main_callfn;
|
||||||
|
$fhemdebug_enabled = 0;
|
||||||
|
return undef;
|
||||||
|
|
||||||
|
} elsif($param eq "status") {
|
||||||
|
return "fhemdebug is ".($fhemdebug_enabled ? "enabled":"disabled");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return "Usage: fhemdebug {enable|disable|status}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub
|
||||||
|
fhemdebug_CheckDefs($@)
|
||||||
|
{
|
||||||
|
my ($txt, $dev, $n) = @_;
|
||||||
|
foreach my $d (keys %defs) {
|
||||||
|
if(!defined($d)) {
|
||||||
|
Log 1, "ERROR: undef \$defs entry found ($txt $dev $n)";
|
||||||
|
delete($defs{undef});
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if($d eq "") {
|
||||||
|
Log 1, "ERROR: '' \$defs entry found ($txt $dev $n)";
|
||||||
|
delete($defs{''});
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if(ref $defs{$d} ne "HASH") {
|
||||||
|
Log 1, "ERROR: \$defs{$d} is not a HASH ($txt $dev $n)";
|
||||||
|
delete($defs{$d});
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
if(!$defs{$d}{TYPE}) {
|
||||||
|
Log 1, "ERROR: >$d< has no TYPE, but following keys: >".
|
||||||
|
join(",", sort keys %{$defs{$d}})."<".
|
||||||
|
"($txt $dev $n)";
|
||||||
|
delete($defs{$d});
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub
|
||||||
|
fhemdebug_CallFn(@)
|
||||||
|
{
|
||||||
|
#Log 1, "fhemdebug_CallFn $_[0] $_[1];
|
||||||
|
|
||||||
|
if(wantarray) {
|
||||||
|
fhemdebug_CheckDefs("before", @_);
|
||||||
|
no strict "refs";
|
||||||
|
my @ret = &{$main_callfn}(@_);
|
||||||
|
use strict "refs";
|
||||||
|
fhemdebug_CheckDefs("after", @_);
|
||||||
|
return @ret;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
fhemdebug_CheckDefs("before", @_);
|
||||||
|
no strict "refs";
|
||||||
|
my $ret = &{$main_callfn}(@_);
|
||||||
|
fhemdebug_CheckDefs("after", @_);
|
||||||
|
use strict "refs";
|
||||||
|
return $ret;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
=item command
|
||||||
|
=item summary try to localize FHEM error messages
|
||||||
|
=item summary_DE Hilfe bei der Lokalisierung von Fehlermeldungen
|
||||||
|
=begin html
|
||||||
|
|
||||||
|
<a name="fhemdebug"></a>
|
||||||
|
<h3>fhemdebug</h3>
|
||||||
|
<ul>
|
||||||
|
<code>fhemdebug {enable|disable|status}</code><br>
|
||||||
|
<br>
|
||||||
|
fhemdebug produces debug information in the FHEM Log to help localize
|
||||||
|
certain error messages. Currently following errors are examined:
|
||||||
|
<ul>
|
||||||
|
- Error: >...< has no TYPE, but following keys: >...<<br>
|
||||||
|
</ul>
|
||||||
|
As it frequently examines internal data-structures, it uses a lot of CPU,
|
||||||
|
it is not recommended to enable it all the time. A FHEM restart after
|
||||||
|
disabling it is not necessary.<br>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
=end html
|
||||||
|
=cut
|
@ -388,6 +388,7 @@ FHEM/98_dewpoint.pm Joachim http://forum.fhem.de Automatis
|
|||||||
FHEM/98_Dooya.pm Jarnsen/ralf9/darkmission http://forum.fhem.de Sonstige Systeme
|
FHEM/98_Dooya.pm Jarnsen/ralf9/darkmission http://forum.fhem.de Sonstige Systeme
|
||||||
FHEM/98_dummy.pm rudolfkoenig http://forum.fhem.de Automatisierung
|
FHEM/98_dummy.pm rudolfkoenig http://forum.fhem.de Automatisierung
|
||||||
FHEM/98_fheminfo.pm mfr69bs http://forum.fhem.de Sonstiges
|
FHEM/98_fheminfo.pm mfr69bs http://forum.fhem.de Sonstiges
|
||||||
|
FHEM/98_fhemdebug.pm rudolfkoenig http://forum.fhem.de Sonstiges
|
||||||
FHEM/98_help.pm betateilchen http://forum.fhem.de Sonstiges
|
FHEM/98_help.pm betateilchen http://forum.fhem.de Sonstiges
|
||||||
FHEM/98_HourCounter.pm john http://forum.fhem.de MAX
|
FHEM/98_HourCounter.pm john http://forum.fhem.de MAX
|
||||||
FHEM/98_logProxy.pm justme1968 http://forum.fhem.de Frontends/SVG Plots logProxy
|
FHEM/98_logProxy.pm justme1968 http://forum.fhem.de Frontends/SVG Plots logProxy
|
||||||
|
4
fhem.pl
4
fhem.pl
@ -1025,6 +1025,7 @@ AnalyzePerlCommand($$;$)
|
|||||||
|
|
||||||
$cmdFromAnalyze = $cmd;
|
$cmdFromAnalyze = $cmd;
|
||||||
my $ret = eval $cmd;
|
my $ret = eval $cmd;
|
||||||
|
Log 1, "ERROR evaluating $cmd: $@" if($@);
|
||||||
$ret = $@ if($@);
|
$ret = $@ if($@);
|
||||||
$cmdFromAnalyze = undef;
|
$cmdFromAnalyze = undef;
|
||||||
return $ret;
|
return $ret;
|
||||||
@ -1162,6 +1163,7 @@ devspec2array($;$)
|
|||||||
if(!$hash->{TYPE}) {
|
if(!$hash->{TYPE}) {
|
||||||
Log 1, "Error: >$d< has no TYPE, but following keys: >".
|
Log 1, "Error: >$d< has no TYPE, but following keys: >".
|
||||||
join(",", sort keys %{$hash})."<";
|
join(",", sort keys %{$hash})."<";
|
||||||
|
delete($defs{$d});
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
my $val;
|
my $val;
|
||||||
@ -4670,7 +4672,7 @@ fhemFork()
|
|||||||
foreach my $d (sort keys %defs) {
|
foreach my $d (sort keys %defs) {
|
||||||
my $h = $defs{$d};
|
my $h = $defs{$d};
|
||||||
$h->{DBH}->{InactiveDestroy} = 1
|
$h->{DBH}->{InactiveDestroy} = 1
|
||||||
if($h->{TYPE} eq 'DbLog' && $h->{DBH}); #Forum #43271
|
if($h->{DBH} && $h->{TYPE} eq 'DbLog'); #Forum #43271
|
||||||
TcpServer_Close($h) if($h->{SERVERSOCKET});
|
TcpServer_Close($h) if($h->{SERVERSOCKET});
|
||||||
if($h->{DeviceName}) {
|
if($h->{DeviceName}) {
|
||||||
require "$attr{global}{modpath}/FHEM/DevIo.pm";
|
require "$attr{global}{modpath}/FHEM/DevIo.pm";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user