Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:67354 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 572 invoked from network); 7 May 2013 19:49:48 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 7 May 2013 19:49:48 -0000 Authentication-Results: pb1.pair.com smtp.mail=krebs.seb@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=krebs.seb@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 74.125.82.44 as permitted sender) X-PHP-List-Original-Sender: krebs.seb@gmail.com X-Host-Fingerprint: 74.125.82.44 mail-wg0-f44.google.com Received: from [74.125.82.44] ([74.125.82.44:63620] helo=mail-wg0-f44.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id A3/A5-06696-ADA59815 for ; Tue, 07 May 2013 15:49:47 -0400 Received: by mail-wg0-f44.google.com with SMTP id z12so1021971wgg.11 for ; Tue, 07 May 2013 12:49:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=uOAedZaqXIqfHpnojF2NeUnGpW+1ZonEQMH20NYxTFI=; b=WtPjMZUYAdj/QNFPt8jrgjT9I8O3kh8ElPgerLeHZMTA5BvTKTmJjD0eNm61ctLx2m CXMvnb4BY1Ya+E2U4hrcqCpY404hloyVtMoSP1x/z49ommEaeUTI6RxZS59Rx9x5BHeH ygdwKpMjwIzliIW7VGNTBt7nYP0xxViAKXPUjBjVQHzU2y4YDlM9ifRPVD+OOSWcKH8X OJeSX81dOjoqce+K9SkjRcf2y8Ar0C5oAIVgbsQXBOGhEl2lixaMceAi1jZsiBPFt4vE MnDoaNV7RuZ99wHpSEHE5h7idBzil82memJTwJZlp8AS0JNti/DkmOtD8FNb7jUm7hkD OPXA== X-Received: by 10.180.185.114 with SMTP id fb18mr16914208wic.33.1367956183911; Tue, 07 May 2013 12:49:43 -0700 (PDT) MIME-Version: 1.0 Received: by 10.217.79.142 with HTTP; Tue, 7 May 2013 12:49:23 -0700 (PDT) In-Reply-To: References: Date: Tue, 7 May 2013 21:49:23 +0200 Message-ID: To: Bob Weinand Cc: PHP List Developers Mailing Content-Type: multipart/alternative; boundary=001a11c343da6917d104dc261e59 Subject: Re: [PHP-DEV] idea: letting the line number and file name be set via user_error From: krebs.seb@gmail.com (Sebastian Krebs) --001a11c343da6917d104dc261e59 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 2013/5/7 Bob Weinand > > Am 7.5.2013 um 21:07 schrieb Sebastian Krebs : > > > > > 2013/5/7 Bob Weinand > >> >> Am 7.5.2013 um 18:25 schrieb Ferenc Kovacs : >> >> > On Tue, May 7, 2013 at 6:09 PM, Thomas Anderson >> wrote: >> > >> >> If you do user_error('whatever') it'll show, as the line number for >> that >> >> error, the line number on which that user_error() call is made. It'd >> be >> >> nice if you could control the line number and file name that was >> displayed. >> >> eg. >> >> >> >> > >> function test() { >> >> user_error('whatever'); >> >> } >> >> >> >> test(); >> >> ?> >> >> >> >> That'll say "Notice: whatever in ... on line 4" (ie. the line that th= e >> >> user_error is on) instead of "Notice: whatever in ... on line 7" (ie. >> the >> >> line that the call to the test() function is made). >> >> >> >> If the displayed line numbers could be controlled by user_error then >> >> debug_backtrace could be used to get the desired line number / file >> name to >> >> display. >> >> >> > >> > line 3, but I suppose that is just a typo on your part. >> > the default error handler reports the line when the actual error is >> > generated and it also provides a backtrace so you can see the callchai= n >> for >> > the execution. >> > I think that this is a sensible default, and allowing to fake that fro= m >> the >> > userland would make the debugging of the problems harder, as many/most >> > people would look up the file:line number and would be surprised that >> there >> > is no E_USER_* thrown there. >> > Additionally I'm not sure how/where would you get your fake line >> numbers. >> > You would either need to hardcode those in your application and make >> sure >> > that the reference and the actual content of your file is in sync (you >> will >> > screw yourself over sooner or later) or you would use __LINE__ + offse= t >> > which is still error prone.. >> > >> > I didn't like this proposal. >> > >> > -- >> > Ferenc Kov=E1cs >> > @Tyr43l - http://tyrael.hu >> >> And today we have the problem that we cannot use in any useful manner >> trigger_error in libraries, when we don't know where the error originate= s >> from. > > > Still don't get it: > > if ($errorCond) { > trigger_error(); > } > > The error orginates from at most one line before... > > > And $errorCond may have some long complicated preprocessing by internal > functions of the framework I don't want to know about, so that I cannot > imagine instantly what's going on? > > You debug today trigger_error's in libraries with putting a >> debug_print_backtrace behind the trigger_error. >> > > I use a debugger :X > > > I don't know why, but I find it more comfortable to debug with gdb than > with xDebug. With gdb it's only setting a break into the trigger_error > function and then use zbacktrace... But for debugging on some production > system because only there something goes wrong for some reason, I wouldn'= t > want to install xDebug (which will be loaded at every request...). > Yes, "debugging by logs" is hard and debugging on a production is "not ideal", thus you should try to reproduce the problem on your development machine. Here you can have any extension you like :) But to some my concerns up: I am unsure, if it is useful to let the error message lie to you. It should tell you, where it appears, not where some reason occured (or not), that might cause the call, that contains the line, where the error occurs. function foo1($a) { foo2($a); } function foo2($a) { foo3($a); } function foo3($a) { foo4($a < 0 ? 0 : $a); } function foo4($a) { foo5($a); } function foo5($a) { if ($a =3D=3D 0) trigger_error('Foo'); } foo1(42); // OK foo1(0); // Error foo1(-42); // Error, but the wrong value now comes from foo3() So now which line should the error report? Note, that in foo3 is a condition, which makes it non-trivial to find out, where the wrong value were injected the first time. btw: Ever considered assert() to find such situations during development? (Of course you should disable them on production) Regards, Sebastian > > > I think you should be able to track down the error source without >> manipulating any library code in the best case (yeah, there exist >> Exceptions (there you can add a backtrace) too, but you have to catch th= em, >> if not your script will abort; but I only need a notice...) >> >> What I'm doing now is using my own error handler, add a "called at >> [line:file]" and output the string myself (via fwrite to STDERR). I don'= t >> think that this is the right way, this seems to me more like a temporary >> solution. >> >> Please change there something that makes it easier to debug >> trigger_error's notices. (But I don't know if only adding a third parame= ter >> to trigger_error is enough...) >> >> >> Bob >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php >> >> > > > -- > github.com/KingCrunch > > > > > Bob > > --=20 github.com/KingCrunch --001a11c343da6917d104dc261e59--