Aspect |
Logging |
Using
a traditional debugger |
Attendance |
Can
be performed by your application while
it's unattended. In other words, you can safely leave you application
running
and later analyze it's output log files for whatever information you
need. |
Must
be attended. Some professional must be
setting all the time monitoring the debugging sessions and judging the
behavior
of the application being debugged. |
Information
display |
The
display of the debugging data can be as
sophisticated, detailed, and formatted as you like. Do not consider it
a
strange case to have graphs for example as an output for your
application logs. |
You
are limited to the display options that are
available inside your debugger. For most cases these options are rather
limited
if compared to the unlimited flexibility of information display in
customized
logging. |
Ability
of further information analysis |
Can
allow exporting logging data to many third
party tools outside the application being debugged for proper display
and
analysis. For example you can export data from your application logs
into
spreadsheets and relational database management systems, hence
benefiting from
their rich analysis tools. This can be particularly useful when you
need to
analyze huge amounts of data that cannot be analyzed by a human in
front of a
screen as in the debugger case. |
The
data you are seeing on the screen while in a
debugging session is highly volatile and has the life only of the
debugging
session. The maximum you can do is to sometimes copy data from your
debugger to
another analysis application which is incomparable to the data transfer
capabilities of the logging case. |
Platform
dependence |
You
can simply, seamlessly, and transparently
analyze your logging data on a machine that is totally different from
the
machine on which you run your application (difference can be in
hardware,
operating system, ... etc). This is particularly useful when the
machine on
which you have to run your application is not equipped with the
analysis tools
you need to analyze your logs. With reference to this feature, logging
can be
considered to be 100% platform independent. |
A
debugger designed for a particular platform
cannot be used on a different one. With the exception of some limited
remote
debugging cases, the debugger must be running on the same machine on
which your
application is running. This assumes this particular machine has a
debugger
suitable for it; some platforms have no debuggers at all. |
Alteration
of the useful code |
This
is one of the disadvantages involved when
using logging. You have to alter your useful code with extra overhead
lines of
code to implement a proper logging mechanism. |
If
a debugger is available, you can immediately
debug your application without altering a single line in it's code. |
Availability |
Always
available. If you can write an
application and run it on a particular platform, then you are
essentially able
to implement logging for your application on this platform. Platform is
not an
issue at all in logging. Sometimes logging is used for a single reason:
There
is no debugger available for this platform. |
There
must be a debugger that is designed
specifically to run on the particular platform under which the
application
being debugged is run. |
Mobility |
You
can send your logging data to anywhere for
later unattended analysis. |
A
professional must be setting in person in the
front of the debugger while in the debugging session. While you can
overcome
this using remote desktop tools or a remote debugger, it's apparent
it's a
reduced flexibility if compared to the logging case. |
Debugging special applications
|
In certain cases the use of debuggers is not feasible even if debuggers are available. Take for example the debugging of a graphical application in which the switching from the graphics display adapter mode in which the application is running to the mode in which the debugger can be run is not practically possible. Take as another example the debugging of real time system applications in which data acquisition is performed very fast that tracking it using a debugger is not practical at all. In the first case, the silent behavior of logging to files is very desirable. In the later case the ability of very quickly logging the data being collected to log files is highly desirable as well. Several similar examples exist like distributed applications and multithreaded applications.
|
Even if available for a particular platform, its use can be impossible at all or at least impractical for applications of special behavior.
|
Performance
|
The application performance can be affected by adding the overhead logging lines to your code. By careful design and the use of the proper logging technology, you can reduce this performance degradation to forgivable amounts.
|
With exception to the specially built debugging version of an application, debuggers can be considered to place a little change in application performance.
|
Code lines granularity and control
|
You can have clues about which part of your application is being executed now but of course not to the same fine level as in the traditional debugger case. You cannot have a control over the code being run other than the control that is built by the developer of the application being debugged.
|
You can execute your code while monitoring what code is being run to any granularity, line by line or even instruction by instruction. You have finer control and can for example bypass certain code lines, repeat other, and even you can stop your application at any time.
|
You can share your information about this topic using the form below!
Please do not post your questions with this form! Thanks.