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.
|
||||
# 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
|
||||
attr JabberDomain
|
||||
- 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_dummy.pm rudolfkoenig http://forum.fhem.de Automatisierung
|
||||
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_HourCounter.pm john http://forum.fhem.de MAX
|
||||
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;
|
||||
my $ret = eval $cmd;
|
||||
Log 1, "ERROR evaluating $cmd: $@" if($@);
|
||||
$ret = $@ if($@);
|
||||
$cmdFromAnalyze = undef;
|
||||
return $ret;
|
||||
@ -1162,6 +1163,7 @@ devspec2array($;$)
|
||||
if(!$hash->{TYPE}) {
|
||||
Log 1, "Error: >$d< has no TYPE, but following keys: >".
|
||||
join(",", sort keys %{$hash})."<";
|
||||
delete($defs{$d});
|
||||
next;
|
||||
}
|
||||
my $val;
|
||||
@ -4670,7 +4672,7 @@ fhemFork()
|
||||
foreach my $d (sort keys %defs) {
|
||||
my $h = $defs{$d};
|
||||
$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});
|
||||
if($h->{DeviceName}) {
|
||||
require "$attr{global}{modpath}/FHEM/DevIo.pm";
|
||||
|
Loading…
x
Reference in New Issue
Block a user