Commit Graph
26 Commits
Author SHA1 Message Date
Rene Gollent 118ddee0fd Adjust ThreadHandler's usage of CreateStackTrace().
- Limit invocations of CreateStackTrace() in ThreadHandler to
  only unwind the topmost frame since that's all it actually
  cares about anyways. Also adjust Step Over to use this
  functionality in order to work with the correct frame addresses,
  since the CPU frame pointer register isn't entirely what we want
  here.
2011-12-14 22:30:09 -05:00
Rene Gollent aeb2d34b0e Fix comment. 2011-12-13 22:54:00 -05:00
Rene Gollent c3946ba021 Properly handle recursive case for Step Over.
When stepping over, check to ensure that we're in the same call
frame that we started in. If not, reinstate the temporary breakpoint
and continue running.
2011-12-13 22:50:16 -05:00
Rene Gollent b57be6adc9 Fix accidentally introduced whitespace from previous commit. 2011-12-13 16:07:23 -05:00
Rene Gollent 6b5a76158f Add TODO note. 2011-12-13 15:52:05 -05:00
Rene Gollent f67acc2c72 Use architecture to determine correct frame pointer comparison. 2011-12-12 08:41:45 -05:00
Rene Gollent 673c1e4d07 Fix step out for recursive functions.
When asked to step out, we now store the frame pointer of the current
stack frame. Upon hitting our temporary breakpoint, we then verify that
the current frame pointer is in fact in the previous frame. If not, we
reinstate the breakpoint and continue running.
2011-12-11 22:32:42 -05:00
Rene Gollent f4e0b8d03a Now that DebuggerInterface is BReferenceable, all of these need to be correctly
acquiring/releasing refs to it as well. Thanks Ingo.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42362 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-07-02 02:01:02 +00:00
Ingo Weinhold c3e066cf6d Replaced uses of obsolescent BReference[able] API.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39869 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-16 13:50:30 +00:00
Rene Gollent d4556a4f56 - More style cleanups.
- Add FindSection() and IsLoaded() calls to ElfFile.
- On init, cache the section start/end for the .text and .plt
  sections in DwarfImageDebugInfo. Use them to make the check
  for classifying addresses significantly cheaper.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39826 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-13 14:05:44 +00:00
Rene Gollent bfd3cafa8b Style fix.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39824 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-12 22:21:46 +00:00
Rene Gollent 958cc95d32 Implement support for detecting if a given target address is in a Procedure
Linkage Table section. Use that additional information to skip PLT entries
while stepping. Fixes #6974.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39823 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-12 22:08:43 +00:00
Ingo Weinhold 0a5b0dae01 Added TODO.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39202 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-10-30 11:45:04 +00:00
Ingo Weinhold 1851e9f3e0 * Added a stopped reason and additional info to Thread. ThreadHandler sets
both accordingly.
* The threads view shows the thread states now. Also added tool tips with
  additional info.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33591 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-15 04:40:33 +00:00
Ingo Weinhold 6e72ebfce3 * More work on retrieving local variable values. Address and compound types can
now be inspected. Still work in progress -- bit fields and arrays don't work
  correctly yet nor does type lookup beyond the current compilation unit.
* Made most of the debugger output configurable via a config header. By default
  it's much less noisy now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33217 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-21 04:39:40 +00:00
Ingo Weinhold a5e1e7ceba Refactoring: Moved TeamDebugModel functionality into Team and got rid of the
former.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31705 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-22 19:20:06 +00:00
Ingo Weinhold b1ce728479 * Added some debug output for stepping.
* Fixed incorrect "step over" handling after hitting the temporary breakpoint.
  Could cause stepping into functions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31673 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 15:08:55 +00:00
Ingo Weinhold 67d0b0790a Added TODO regarding issues with recursive functions.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31665 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 01:50:01 +00:00
Ingo Weinhold da4d62db94 * Worker:
- Made Job Referenceable.
  - Turned JobKey into an abstract base class to add flexibility. The new
    SimpleJobKey is a subclass with the former functionality.
* TeamWindow: Removed the TeamWindow* parameter from the listener hooks. The
  TeamDebugger knows anyway.
* Added IDs to Variable, Function, and FunctionInstance. The latter two generate
  the ID on the fly, Variable stores it.
* SpecificImageDebugInfo::CreateFrame(): Changed FunctionDebugInfo* debug
  parameter to FunctionInstance* to provide more info (the function ID).
* DwarfInterfaceFactory/DwarfImageDebugInfo:
  - Added class DwarfFunctionParameterID, an ID class implementation for
    function parameters and set the IDs on the parameter objects.
  - Retrieve the size of a type (i.e. the size of its objects) and store it in
    DwarfType.
  - If a parameter's ValueLocation doesn't have a size, set that of the
    respective type.
  - Map the register indicies in the parameters' ValueLocations from DWARF to
    our indices.
* Added class TypeComponentPath for identifying subcomponents in types.
* Added class StackFrameValues, a container associating variables and their
  subcomponents with values.
* StackFrame does now have a StackFrameValues object for parameters and local
  variables and a mechanism to notify listeners when values have been retrieved.
* Added GetStackFrameValueJob to retrieve variable values. Lots of functionality
  is missing yet. Most notably it doesn't retrieves values for subcomponents.
* Wired everything to trigger loading of variable values and getting notified
  when done.
* VariablesView: Added a value column. This is all very basic and has to be
  done differently, but at least values for the parameters can be seen already.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31636 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-18 23:52:16 +00:00
Ingo Weinhold 7d095b893a Incorrect check -- user-defined breakpoints would be ignored.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31494 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-09 23:34:34 +00:00
Ingo Weinhold f66bd6256a Very much work in progress, not in a particularly working state. Haiku munged
a good part of the source tree, so I rather get those changes into the
repository before continuing.
The general aim of the work is to deal with multiple instances of the same
function, e.g. inlined or non-inlined inline functions or those weird duplicates
gcc (4 at least) seems to be generating for no apparent reason.
* Added classes FunctionInstance (wrapping FunctionDebugInfo) and Function.
  FunctionInstance represents a physical instance of a function (e.g. inlined
  function at a particular address). A Function collects all FunctionInstances
  referring to the same source code location.
* Moved the SourceCode property from FunctionDebugInfo to Function accordingly.
* Since SourceCode is no longer associated with a concrete function instance,
  several methods dealing with statements have been removed and the
  functionality has been provided through other means (e.g. TeamDebugModel or
  SpecificImageDebugModel). This part is not yet completed.
* Introduced UserBreakpoint and UserBreakpointInstance. The user sets a
  breakpoint at a source code location, which is represented by a
  UserBreakpoint. Since that source location can be mapped to one address per
  instance of the respective function, UserBreakpoint has a
  UserBreakpointInstance per such function instance, which in turn refers to a
  Breakpoint (an actual breakpoint at an address).
* Adjusted Breakpoint, BreakpointManager, and TeamDebugger accordingly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31447 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-07 20:47:39 +00:00
Ingo Weinhold d9b10dea3b * Extended ImageInfo and Image so they know the image type.
* Added DebuggerInterface::GetSymbolInfo().
* Implementing stopping the thread in main() when the debugger started the
  debugged program.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31393 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-03 14:23:19 +00:00
Ingo Weinhold 671ef9b084 * Some moving and renaming.
* Added TeamDebugInfo which serves as factory for ImageDebugInfos.
* Added the DWARF code to the build again. It's not used yet, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31278 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-27 21:09:21 +00:00
Ingo Weinhold 6fb6551c97 * ThreadHandler::_ClearContinuationState(): Forgot to set fStepStatement to
NULL after releasing its reference, so it could be released again later.
* No longer attach the source code to StackFrame, but rather to
  FunctionDebugInfo. Besides being the more obvious place it also prevents
  un-/reloading the source code when stepping. Only disadvantage is that we
  never unload the source again yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31256 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-26 15:11:56 +00:00
Ingo Weinhold 43b0f7e0d7 * Moved breakpoint management into new class BreakpointManager and added
support for temporary breakpoints.
* TeamDebugger: No longer handle debug events in the listener thread. Instead
  post a message to the looper thread. Makes the locking a bit easier.
* Architecture: Added virtual GetInstructionInfo() and GetStatement() returning
  information on the instruction respectively a statement at a given address.
  Implemented for x86.
* DebugInfo: Added virtual GetStatement() and implemented it for
  DebuggerDebugInfo by means of using the Architecture.
* Implemented step over/into/out support. Works in principle, but has no
  handling for PLTs yet, i.e. stepping into functions of other libraries
  requires two steps ATM.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31244 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-25 23:51:09 +00:00
Ingo Weinhold 194b3b719a * Moved all handling of threads from TeamDebugger into new class ThreadHandler.
* Added new job to get the initial state of a thread.
* Now we also get the states of new threads correctly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31221 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-24 01:46:38 +00:00