Ge van Geldorp wrote:
From:
ion(a)svn.reactos.com
KD System Rewrite:
This utterly broke the GDB stub, to the point that I can't even use DbgPrint
anymore to try and figure out what's wrong. May I suggest you go and read
http://www.joelonsoftware.com/articles/fog0000000069.html first, revert this
patch (so I can get on with my work), and then, if you still feel this
overwhelming urge to rewrite, test all the functionality you're replacing
(you obviously didn't even consider a "/DEBUGPORT=GDB" and boot test
necessary) before recommiting.
If I sound a little bit pissed-off, that's because it's exactly how I feel.
This is not the first time I've been bitten by a rewrite. Back in January I
spent a lot of time improving symbol handling and profiling, only to see you
remove the profiling code a few weeks later, for a "new and improved"
rewrite. Only problem is, the "new and improved" profiling system doesn't
produce any output and is therefore useless. You said you would fix that in
a weeks time, but now, months later, still nothing. I'll be damned if I'm
going to let the same happen to the GDB stub, which I use on a daily basis.
We all break stuff sometimes (God knows I do) and I can live with that. I
can even live with rewrites when they're necessary for binary compatibility
(after all, that's what this project is all about) but I'm highly suspicious
of rewrites because of "well, uhmm, I think my way is cleaner".
Gé van Geldorp.
Hi,
I'd just like to add that in my humble opinion, adding 20 lines of code
to support a new debugger is 100x better then adding 1000.
Imagine a complex debugging environment in ROS, where we support
everything from re-assembling a function, disassembling, viewing the
gdt, adding breakpoints, etc. Say we have 50 debugging functions. With
the old system, each one would look like this:
if (KdDebuggerState & Foo)
FooBreakPoint
if (KdDebuggerState & Foo1)
Foo1BreakPoint
if (KdDebuggerState & Foo2)
Foo2BreakPoint
if (KdDebuggerState & Foo3)
Foo3BreakPoint
if (KdDebuggerState & Foo4)
Foo4BreakPoint
if (KdDebuggerState & Foo5)
Foo5BreakPoint
if (KdDebuggerState & Foo6)
Foo6BreakPoint
....
if (KdDebuggerState & Foo10)
Foo10BreakPoint
And this, for every single function. If you really think that's cleaner
then parsing a list-entry and calling registered functions then
err...ok, you're entitled to your opinion. So yeah "umm..my way is
cleaner".
I removed the profiling code for binary compatibility and I asked you if
that was ok. I know I haven't had time to write a profiler client and
I'm sorry.
I'll fix the GDB stub.
Best regards,
Alex Ionescu