Bug 6637

Summary: fstack eats an NPE backtrace
Product: frysk Reporter: Andrew Cagney <cagney>
Component: generalAssignee: Andrew Cagney <cagney>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P2    
Version: unspecified   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description Andrew Cagney 2008-06-12 14:54:28 UTC
When a serious problem occures, such as an NPE, the stack backtrace should be
included, for instance:

Error: java.lang.NullPointerException

is too terse.
Comment 1 Andrew Cagney 2008-06-12 17:44:25 UTC
commit 531115f2541df6ed1e8a8f16e24c519fb858b209
Author: Andrew Cagney <cagney@toil.yyz.redhat.com>
Date:   Thu Jun 12 13:28:25 2008 -0400

    Provide parent for user and internal exceptions; try.
    
    This adds two root exceptions (they both extend RuntimeException):
    
    UserException:
    
    (I toyed with the name ExternalException also, and better suggestions
    welcome).  This corresponds to an error problem caused by user
    provided information and hence is likely going to be displayed as an
    informational message to the user.  For instance, the user provided
    invalid input from the console; or a user supplied file is in some way
    invalid, or even a data being read from the target's memory (such as a
    table) is found to be invalid.  The key thing is that something
    exceptional has occured that is external to frysk's control.
    
    InternalException:
    
    This corresponds to a problem in frysk's code base.  For instance,
    missing or unimplemented code, or a programming error.  Java
    exceptions such as ArrayIndexOutOfBounds can also be considered to
    fall into this category.  If such an exception bubbles up to user
    level, it will likely want to be displayed as a backtrace.
    
fexe 7208
Exception in thread "main" java.lang.NullPointerException
   at java.io.File.normalizePath(libgcj.so.8rh)
   at java.io.File.<init>(libgcj.so.8rh)
   at frysk.proc.live.LinuxPtraceProc.getExeFile(fexe)
   at frysk.bindir.fexe$PrintExeEvent.executeLive(fexe)
   at frysk.util.ProcStopUtil$UtilEvent.execute(fexe)
   at frysk.event.EventLoop.runEventLoop(fexe)
   at frysk.event.EventLoop.run(fexe)
   at frysk.util.ProcStopUtil$1.parsePids(fexe)
   at frysk.util.CommandlineParser.doParse(fexe)
   at frysk.util.CommandlineParser.parse(fexe)
   at frysk.util.ProcStopUtil.execute(fexe)
   at frysk.bindir.fexe.main(fexe)