On Friday, 19 December 2014 at 16:27:03 UTC, H. S. Teoh via Digitalmars-d wrote:

Could
this lack of need be attributable to understanding of the entire code
base being used?

Nope.

FWIW, I work with a large enterprise project that is far too large for anyone to grasp in its entirety, yet I don't find debuggers that helpful either. Well, they *are* helpful in some cases, just not as many as
people often claim, as least not for me.  The oft-maligned
printf-debugging, when wisely used in a targeted way, is often better IME because I'm dealing with an embedded environment, where it's a pain to setup a debugger. Well, it *can't* run a full debugger; the best it can so is to run gdbserver which I then have to connect to remotely. Once that's setup, I run into the frustrating problem of gdb being
unable to find the requisite symbols, needing to be in the same
directory as the executable, being unable to locate the source file(s),
being unable to resolve library symbols, ad nauseaum.


I think that "at least not for me" is important there. Personally, I did not malign the printf debugging approach. However nothing is more painful than sitting through a printf debugging session with someone new to code who is using the printf to learn the code, when a perfectly good debugger is available. Is the embedded environment you describe the typical case?

I'm not advocating, not reading or attempting to understand the code. But, assume you have your best understanding at hand and still have questions and/or bugs; you drop a breakpoint in code that is new to you. What you get is much more than the documentation: you get the callstack allowing you to navigate the code, you get the data allowing you to see the structures and their content. Problems with gdb does not take away from the benefit debugging in general. Remember this thread was started with someone having bugs in a windows environment.

Not many advocate ignorance. Programmers do advocate laziness with good cause. In theory, if a person can successfully use code without understanding all details of its implementation then that person has made a mental cost savings. Maybe not so important to the set of coders here - but there is value in not being required to understand all details. One benefit of the separation of concerns between interfaces and implementation is the level of understanding required for the former might be significantly less than the latter.


I imagine you don't have many outside dependencies for your boot loader. I imagine most of what Walter works on involves an entire
stack that he has either written from ground up or when pulling
outside dependencies in has much less surface area to deal with that
is new to him.

Unfortunately, your imagination isn't quite accurate in this case.

How so? Is the bootloader using vibed or websockets? Does dmd use vibed or websockets? Of course your next reply can be all the complex libraries dmd uses internally to which I'll reply that all of those are code that Walter is likely intimately familiar with making it easy for him with his vast experience to not use a debugger. No one has to use a debugger, but I'm in the camp that they can make life easier especially when getting familiar with new code. Maybe here I'm in the minority.



Contrast that with someone wanting to tie into a framework (vibed) or use a sophisticated library (websockets). Yes, you can stick with the
"real men don't use debuggers" line, but that is much easier to
stomach when your outside dependencies are small in scope.

That is a false assumption, based on my experience as described above.


How does your unfortunate situation of being "with a large enterprise project that is far too large for anyone to grasp in its entirety, yet I don't find debuggers that helpful" relate to the extent of dependencies and their impact on utility of a debugger? I get that in general you don't find debuggers useful, which is fine. When trying to understand a tangled mess of code that you did not write your preferred method is read the code and printf. Those are valuable. Maybe someone who rarely or never uses a debugger is not the best to gauge the benefit differential of a debugger on systems with few outside dependencies versus systems with heavy outside dependencies.


Isn't one of the best ways to learn a new codebase to step through it
in the debugger?
[...]

Absolutely not. You'd get lost in the forest *really* quickly and lose sight of the forest for the trees, especially in a large codebase where each logical operation may involve a dozen layers of abstraction, and lower-level code is all generic so you won't easily understand how it concretely fits into the big picture. For this, I recommend reading the
source code instead(!). That's what the source code is for!!


More chest beating. I don't see how the *addition* of a debugger causes one to get lost. I'm in emacs trying to learn a new code base. Everything I could do before I can still do (including reading the source code) and I can look at real live data, examine structures with contents, quickly navigate the stack, etc. It only adds value IMO as it is not an either/or.

Of course, none of this implies that we shouldn't work on making D work
better with debuggers; quite on the contrary, I found it very
frustrating sometimes when I *do* need to use the debugger but D support for that is rather anemic. Fortunately, being a printf-debugging veteran
does help work around such limitations. :-P

I guess that makes D's fast compile times all the more important to you.



T

Reply via email to