Commit graph

23 commits

Author SHA1 Message Date
radare
f74dd31440
Fix debugger build on Linux/s390x ##build (#16105) 2020-03-03 00:03:43 +01:00
yossizap
2e5f4b41b4 Fix multithreaded breakpoint behavior in linux ##debug
The plugin wouldn't properly trace breakpoint hits on different threads
since they weren't switched to and the events weren't always handled.
Also, since the breakpoints are removed after they are found in one of the
threads, it's best to stop all threads for now even if dbg.threads is false.
2020-01-10 00:30:18 +01:00
yossizap
230d2364f4 Add location in file to linux dpt output ##debug (#15744)
Shows the module, offset and function name instead of showing the executable's
path for all threads
2020-01-03 00:56:15 +01:00
yossizap
7823430724 Add process selection to linux native debug ##debug
Previously, `dp=` wouldn't fully switch to the given process since it was
treated like `dpt` thread switching, leaving the debugger in an undefined state.
2019-12-04 10:55:29 +01:00
yossizap
a99c8026bd Improve linux native debug dp output ##debug
Previously, the command didn't show the pid's path, replaced the path
field with current/ppid, and showed the ppid instead of only showing the
requested process and the children of the requested process.
2019-11-30 00:50:18 +01:00
yossizap
d9fa409563 Added support to thread switching in linux and fix r_debug_select ##debug 2019-10-17 19:21:58 +02:00
pancake
3be447f2c5 Fix debugger build for native GNU/Linux on RISC-V ##debug 2019-10-16 09:29:37 +00:00
Khairul Kasmiran
9484bdb622 Fixed r_debug_native_reg_profile const qualifier warning 2017-12-31 20:59:52 +08:00
Khairul Kasmiran
0c048b2774 Moved some static prototypes into their source file 2017-12-20 22:38:20 +08:00
leberus
f3d11405e7 Fix debug for Linux 2017-08-02 14:49:56 +02:00
Giovanni
43532031c4 Fixes for windows and some are also global (#6936) 2017-03-08 08:49:31 +01:00
leberus
286ca4d0ed Add: support for dbg.follow.child option (#6525) 2017-01-18 00:40:30 +01:00
pancake
2a83f21a3e Make gcc6 warnings happy 2017-01-15 22:02:57 +01:00
leberus
dc5be7a767 Improving debug on linux (#6435) 2017-01-11 17:39:09 +01:00
Eugene
4530585132 Refactoring fixes in debug/linux (#6339) 2016-12-18 12:20:31 +01:00
Rakholiya Jenish
276f3ce1d2 Fix compilation error on arm64 (#6224) 2016-11-20 11:33:07 +01:00
Joshua J. Drake
722c62827b Major rework to the native debugger (esp on Linux) (#5185)
The major contribution here is completely re-worked breakpoint hit/recoil
handling. This work fixes #4907 and lays the ground work for future native
debugger improvements (multi-threading, etc).

* Give a human friendly type to enums
* Change many wait functions to return RDebugReasonType
* Better return checking (from r_debug_reg_sync, r_bp_restore)
* Optimized register synchronization
* Lots of comments and whitespace changes
* Improved inferior death detection

Handle EXIT_PID events differently than DEAD process events

* Move breakpoint/recoil handling to wait/cont/step

Rather than handing breakpoint related things inside cmd_debug.c, do that
inside the r_debug API functions. This seems like the most logical place for it
to live since it should apply to just about any platform/architecture.  This
also centralizes calling into "cmd.bp" handling via the CoreBind callback.

* Track how the caller wishes to continue

It turns out that handling break point recoils is very complicated. The ptrace
API on Linux returns SIGTRAP for just about every type of operation (not just
breakpoints getting hit). Add the "recoil_mode" flag to indicate whether we are
single-stepping or continuing and whether or not we are inside the recoil.

* Proper handling for swstep=true

Since r_debug_step_soft calls r_debug_continue, it's already hitting the recoil
case there. Move the recoil handling from r_debug_step to r_debug_step_hard
only.

For the swstep=true case, special handling is required inside r_debug_recoil.
By resetting all of the breakpoints except the one we just hit, we ensure we
can step the original instruction and hit the new swstep breakpoint. Add a new
bp function called r_bp_restore_except to do this.

To make matters worse, we cannot use a BreakpointItem pointer because that
leads to a use-after-free condition. Instead, we the breakpoint address
instead.

Now breakpoints should work regardless of the swtep setting.

* Always call the recoil before continuing

Some callers of r_debug_continue might not have ever inserted any breakpoints
before. If we don't restore breakpoints before each call to the underlying
continue we won't hit them.

* Hide software step breakpoint events from the user

When a breakpoint even happens due to a software-step, hide it from the user.
They aren't really breakpoints as far as they are concerned.

* Improve process exit handling on Linux

There are three types of process exiting events on Linux:

1. PTRACE_EVENT_EXIT occurs just before a process exits. It's not possible to
prevent it from exiting, but it can be used to inspect the pre-exit state.
2. The process can exit for a variety of reasons and we can notice when we call
waitpid(2).
3. The process could die randomly on us :-/

On Windows, h->wait will return R_DEBUG_REASON_EXIT_PID, but it's more likely
on Linux to find out the process is already dead.

* Check more bits within waitpid status

We can often make a decision about what happened strictly by looking at the
status returned from waitpid. In other cases, we need to call
r_debug_handle_signals.

If we reach the end of this function without knowing what happened, consider it
an error.
2016-06-22 10:34:45 +02:00
pancake
48d5e668eb No more linux-ppc blindfixing. This one is for real 2016-05-19 16:21:57 +02:00
pancake
7f80a159c3 More powerpc blindfixing 2016-05-19 12:27:58 +02:00
pancake
1f56a8fad6 Finally working ARM64-linux (android) debugger 2015-11-17 16:06:45 +01:00
Álvaro Felipe Melchor
fb93dffde3 more cleanup in debug_native.c - linux 2015-08-19 17:31:00 +02:00
pancake
91bf85cb7a Some more cleanup in debug 2015-08-13 04:07:54 +02:00
Álvaro Felipe Melchor
c959d92c9d WIP refactor debug 2015-08-11 08:53:05 +02:00