debug 1.0.0.alpha1 → 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +20 -19
- data/README.md +353 -51
- data/Rakefile +21 -1
- data/debug.gemspec +6 -11
- data/exe/rdbg +32 -1
- data/ext/debug/debug.c +118 -0
- data/ext/debug/extconf.rb +2 -0
- data/ext/debug/iseq_collector.c +91 -0
- data/lib/debug.rb +1 -1
- data/lib/debug/breakpoint.rb +310 -36
- data/lib/debug/client.rb +4 -11
- data/lib/debug/config.rb +100 -7
- data/lib/debug/console.rb +89 -0
- data/lib/debug/open.rb +10 -0
- data/lib/debug/run.rb +2 -0
- data/lib/debug/server.rb +128 -21
- data/lib/debug/session.rb +605 -170
- data/lib/debug/source_repository.rb +27 -20
- data/lib/debug/thread_client.rb +294 -119
- data/lib/debug/version.rb +1 -1
- data/misc/README.md.erb +325 -0
- metadata +22 -42
- data/lib/debug/repl.rb +0 -69
- data/lib/debug/tcpserver.rb +0 -22
- data/lib/debug/unixserver.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99f9de5fc37782d330788a745b34666e07d37c9e168eb7b0361d3b51b8247b56
|
4
|
+
data.tar.gz: 3e6941a9b066ec0965e576b87c8e0cc0bc787571fa5331ca962d906611c368e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a279de53e047d52c18c0b1c726da4bbf6efbd116f2957f3fa1c106fec929bb0dc903274d9fce8bb03a787f7ca31edd09d54a09b572027485c5a985205e518582
|
7
|
+
data.tar.gz: 5c436bdfa54ab8d2ece8c07fdac31481f0a9e4922ac433e871c09dd0b161d812eaf7c417189e0e9582421d8405a5169ec826065930c3a7441fdd72953c2786de
|
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/LICENSE.txt
CHANGED
@@ -1,21 +1,22 @@
|
|
1
|
-
|
1
|
+
Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
|
2
2
|
|
3
|
-
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
4
|
+
modification, are permitted provided that the following conditions
|
5
|
+
are met:
|
6
|
+
1. Redistributions of source code must retain the above copyright
|
7
|
+
notice, this list of conditions and the following disclaimer.
|
8
|
+
2. Redistributions in binary form must reproduce the above copyright
|
9
|
+
notice, this list of conditions and the following disclaimer in the
|
10
|
+
documentation and/or other materials provided with the distribution.
|
4
11
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
THE SOFTWARE.
|
12
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
13
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
14
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
15
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
16
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
17
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
18
|
+
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
19
|
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
20
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
21
|
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
22
|
+
SUCH DAMAGE.
|
data/README.md
CHANGED
@@ -1,86 +1,315 @@
|
|
1
1
|
# debug.rb
|
2
2
|
|
3
|
-
|
3
|
+
This library provides debugging functionality to Ruby.
|
4
|
+
|
5
|
+
This debug.rb is replacement of traditional lib/debug.rb standard library which is implemented by `set_trace_func`.
|
6
|
+
New debug.rb has several advantages:
|
7
|
+
|
8
|
+
* Fast: No performance penalty on non-stepping mode and non-breakpoints.
|
9
|
+
* Remote debugging: Support remote debugging natively.
|
10
|
+
* UNIX domain socket
|
11
|
+
* TCP/IP
|
12
|
+
* VSCode/DAP integration (TODO)
|
13
|
+
* Extensible: application can introduce debugging support with several methods
|
14
|
+
* By `rdbg` command
|
15
|
+
* By loading libraries with `-r` command line option
|
16
|
+
* By calling Ruby's method explicitly
|
17
|
+
* Misc
|
18
|
+
* Support threads (almost done) and ractors (TODO).
|
19
|
+
* Support suspending and entering to the console debugging with `Ctrl-C` at most of timing.
|
20
|
+
* Show parameters on backtrace command.
|
21
|
+
|
22
|
+
# Installation
|
4
23
|
|
5
24
|
```
|
6
|
-
$ gem install debug
|
25
|
+
$ gem install debug --pre
|
7
26
|
```
|
8
27
|
|
9
|
-
or specify `-Ipath/to/debug/lib` in `RUBYOPT` or each ruby command-line
|
28
|
+
or specify `-Ipath/to/debug/lib` in `RUBYOPT` or each ruby command-line option, especially for debug this gem development.
|
10
29
|
|
11
30
|
# How to use
|
12
31
|
|
13
32
|
## Invoke with debugger
|
14
33
|
|
15
|
-
|
34
|
+
You can run ruby program on debugger with the local debug console or the remote debug console.
|
35
|
+
|
36
|
+
* (a) Run a ruby program with the local debug console
|
37
|
+
* (b) Run a ruby program with the remote debug console by opening a network port
|
38
|
+
* (b-1) Open with UNIX domain socket
|
39
|
+
* (b-2) Open with TCP/IP port
|
40
|
+
|
41
|
+
(b-1) is useful when you want to use debugging features after running the program.
|
42
|
+
(b-2) is also useful when you don't have a ssh access for the Ruby process.
|
43
|
+
|
44
|
+
To use debugging feature, you can have 3 ways.
|
45
|
+
|
46
|
+
* (1) Use `rdbg` command
|
47
|
+
* (2) Use `ruby -r debug...` command line option
|
48
|
+
* (3) Write `require 'debug...'` in .rb files
|
49
|
+
|
50
|
+
### Local debug console
|
16
51
|
|
17
52
|
```
|
18
|
-
|
53
|
+
# (1) Use `rdbg` command
|
54
|
+
$ rdbg target.rb
|
55
|
+
$ rdbg -- -r foo -e expr # -- is required to make clear rdbg options and ruby's options
|
56
|
+
|
57
|
+
# (2) Use `-r debug/run` command line option
|
58
|
+
|
59
|
+
$ ruby -r debug/run target.rb
|
60
|
+
|
61
|
+
# (3) Write `require 'debug...' in .rb files
|
62
|
+
|
63
|
+
$ cat target.rb
|
64
|
+
require 'debug/run' # start the debug console
|
65
|
+
...
|
66
|
+
|
67
|
+
# or
|
68
|
+
|
69
|
+
$ cat target.rb
|
70
|
+
require 'debug/session' # introduce the functionality
|
71
|
+
DEBUGGER__.console # and start the debug console
|
72
|
+
|
73
|
+
$ ruby target.rb
|
19
74
|
```
|
20
75
|
|
21
|
-
|
76
|
+
When you run the program with the debug console, you will see the debug console prompt `(rdbg)`.
|
77
|
+
The debuggee program (`target.rb`) is suspended at the beggining of `target.rb`.
|
22
78
|
|
23
|
-
You can
|
79
|
+
You can type any debugger's command described bellow. "c" or "continue" resume the debuggee program.
|
80
|
+
You can suspend the debuggee program and show the debug console with `Ctrl-C`.
|
81
|
+
|
82
|
+
The following example shows simple usage of the debug console. You can show the all variables
|
83
|
+
|
84
|
+
```
|
85
|
+
$ rdbg ~/src/rb/target.rb
|
86
|
+
|
87
|
+
[1, 5] in /home/ko1/src/rb/target.rb
|
88
|
+
=> 1| a = 1
|
89
|
+
2| b = 2
|
90
|
+
3| c = 3
|
91
|
+
4| p [a + b + c]
|
92
|
+
5|
|
93
|
+
--> #0 /home/ko1/src/rb/target.rb:1:in `<main>'
|
94
|
+
|
95
|
+
(rdbg) info # Show all local variables
|
96
|
+
%self => main
|
97
|
+
a => nil
|
98
|
+
b => nil
|
99
|
+
c => nil
|
100
|
+
|
101
|
+
(rdbg) p a # Same as p(a)
|
102
|
+
=> nil
|
103
|
+
|
104
|
+
(rdbg) s # Step in ("s" is a short name of "step")
|
105
|
+
|
106
|
+
[1, 5] in /home/ko1/src/rb/target.rb
|
107
|
+
1| a = 1
|
108
|
+
=> 2| b = 2
|
109
|
+
3| c = 3
|
110
|
+
4| p [a + b + c]
|
111
|
+
5|
|
112
|
+
--> #0 /home/ko1/src/rb/target.rb:2:in `<main>'
|
113
|
+
|
114
|
+
(rdbg) <Enter> # Repeat the last command ("step")
|
115
|
+
|
116
|
+
[1, 5] in /home/ko1/src/rb/target.rb
|
117
|
+
1| a = 1
|
118
|
+
2| b = 2
|
119
|
+
=> 3| c = 3
|
120
|
+
4| p [a + b + c]
|
121
|
+
5|
|
122
|
+
--> #0 /home/ko1/src/rb/target.rb:3:in `<main>'
|
123
|
+
|
124
|
+
(rdbg) # Repeat the last command ("step")
|
125
|
+
|
126
|
+
[1, 5] in /home/ko1/src/rb/target.rb
|
127
|
+
1| a = 1
|
128
|
+
2| b = 2
|
129
|
+
3| c = 3
|
130
|
+
=> 4| p [a + b + c]
|
131
|
+
5|
|
132
|
+
--> #0 /home/ko1/src/rb/target.rb:4:in `<main>'
|
133
|
+
|
134
|
+
(rdbg) info # Show all local variables
|
135
|
+
%self => main
|
136
|
+
a => 1
|
137
|
+
b => 2
|
138
|
+
c => 3
|
139
|
+
|
140
|
+
(rdbg) c # Contineu the program ("c" is a short name of "continue")
|
141
|
+
[6]
|
142
|
+
```
|
24
143
|
|
25
144
|
### Remote debug (1) UNIX domain socket
|
26
145
|
|
27
146
|
```
|
28
|
-
|
147
|
+
# (1) Use `rdbg` command
|
148
|
+
$ rdbg --open target.rb # or rdbg -O target.rb for shorthand
|
149
|
+
Debugger can attach via UNIX domain socket (/home/ko1/.ruby-debug-sock/ruby-debug-ko1-5042)
|
150
|
+
...
|
151
|
+
|
152
|
+
# (2) Use `-r debug/open` command line option
|
153
|
+
|
154
|
+
$ ruby -r debug/open target.rb
|
155
|
+
Debugger can attach via UNIX domain socket (/home/ko1/.ruby-debug-sock/ruby-debug-ko1-5042)
|
156
|
+
...
|
157
|
+
|
158
|
+
# (3) Write `require 'debug/open' in .rb files
|
159
|
+
$ cat target.rb
|
160
|
+
require 'debug/open' # open the debugger entry point by UNIX domain socket.
|
161
|
+
...
|
162
|
+
|
163
|
+
# or
|
164
|
+
|
165
|
+
$ cat target.rb
|
166
|
+
require 'debug/server' # introduce remote debugging feature
|
167
|
+
DEBUGGER__.open # open the debugger entry point by UNIX domain socket.
|
168
|
+
# or DEBUGGER__.open_unix to specify UNIX domain socket.
|
169
|
+
|
170
|
+
$ ruby target.rb
|
171
|
+
Debugger can attach via UNIX domain socket (/home/ko1/.ruby-debug-sock/ruby-debug-ko1-5042)
|
172
|
+
...
|
29
173
|
```
|
30
174
|
|
31
175
|
It runs target.rb and accept debugger connection within UNIX domain socket.
|
176
|
+
The debuggee process waits for debugger connection at the beggining of `target.rb` like that:
|
177
|
+
|
178
|
+
```
|
179
|
+
$ rdbg -O ~/src/rb/target.rb
|
180
|
+
DEBUGGER: Debugger can attach via UNIX domain socket (/home/ko1/.ruby-debug-sock/ruby-debug-ko1-29828)
|
181
|
+
DEBUGGER: wait for debuger connection...
|
182
|
+
```
|
32
183
|
|
33
|
-
You can attach the program with the
|
184
|
+
You can attach the program with the following command:
|
34
185
|
|
35
186
|
```
|
36
|
-
$
|
37
|
-
|
38
|
-
|
187
|
+
$ rdbg --attach # or rdbg -A for shorthand
|
188
|
+
|
189
|
+
[1, 4] in /home/ko1/src/rb/target.rb
|
190
|
+
1| (1..).each do |i|
|
191
|
+
=> 2| sleep 0.5
|
192
|
+
3| p i
|
193
|
+
4| end
|
194
|
+
--> #0 [C] /home/ko1/src/rb/target.rb:2:in `sleep'
|
195
|
+
#1 /home/ko1/src/rb/target.rb:2:in `block in <main>' {|i=17|}
|
196
|
+
#2 [C] /home/ko1/src/rb/target.rb:1:in `each'
|
197
|
+
# and 1 frames (use `bt' command for all frames)
|
198
|
+
|
199
|
+
(rdb)
|
39
200
|
```
|
40
201
|
|
41
|
-
|
202
|
+
and you can input any debug commands. `c` (or `continue`) continues the debuggee process.
|
203
|
+
|
204
|
+
You can detach the debugger from the debugger process with `quit` command.
|
205
|
+
You can re-connect to the debuggee process by `rdbg -A` command again, and the debuggee process suspends the execution (and debugger can input any debug commands).
|
206
|
+
|
207
|
+
If you don't want to stop the debuggee process at the beggining of debuggee process (`target.rb`), you can use the fowllowings to specify "non-stop" option.
|
42
208
|
|
43
|
-
|
209
|
+
* Use `rdbg -n` option
|
210
|
+
* Set the environment variable `RUBY_DEBUG_NONSTOP=1`
|
211
|
+
|
212
|
+
If you are running multiple debuggee processes, the attach command (`rdbg -A`) shows the options like that:
|
44
213
|
|
45
214
|
```
|
46
|
-
$
|
215
|
+
$ rdbg --attach
|
47
216
|
Please select a debug session:
|
48
217
|
ruby-debug-ko1-19638
|
49
218
|
ruby-debug-ko1-19603
|
50
219
|
```
|
51
220
|
|
52
|
-
and you need to specify one:
|
221
|
+
and you need to specify one (copy and paste the name):
|
53
222
|
|
54
223
|
```
|
55
|
-
$
|
224
|
+
$ rdbg --attach ruby-debug-ko1-19638
|
56
225
|
```
|
57
226
|
|
58
227
|
The socket file is located at
|
59
228
|
* `RUBY_DEBUG_SOCK_DIR` environment variable if available.
|
60
229
|
* `XDG_RUNTIME_DIR` environment variable if available.
|
61
|
-
* `$HOME
|
230
|
+
* `$HOME/.ruby-debug-sock` if `$HOME` is available.
|
62
231
|
|
63
232
|
### Remote debug (2) TCP/IP
|
64
233
|
|
234
|
+
You can open the TCP/IP port instead of using UNIX domain socket.
|
235
|
+
|
65
236
|
```
|
66
|
-
|
237
|
+
# (1) Use `rdbg` command
|
238
|
+
$ rdbg -O --port=12345 target.rb
|
239
|
+
# or
|
240
|
+
$ rdbg --open --port=12345 target.rb
|
241
|
+
Debugger can attach via TCP/IP (localhost:12345)
|
242
|
+
...
|
243
|
+
|
244
|
+
# (2) Use `-r debug/open` command line option
|
245
|
+
|
246
|
+
$ RUBY_DEBUG_PORT=12345 ruby -r debug/open target.rb
|
247
|
+
Debugger can attach via TCP/IP (localhost:12345)
|
248
|
+
...
|
249
|
+
|
250
|
+
# (3) Write `require 'debug/open' in .rb files
|
251
|
+
$ cat target.rb
|
252
|
+
require 'debug/open' # open the debugger entry point.
|
253
|
+
...
|
254
|
+
|
255
|
+
# and run with environment variable RUBY_DEBUG_PORT
|
256
|
+
$ RUBY_DEBUG_PORT=12345 ruby target.rb
|
257
|
+
Debugger can attach via TCP/IP (localhost:12345)
|
258
|
+
...
|
259
|
+
|
260
|
+
# or
|
261
|
+
|
262
|
+
$ cat target.rb
|
263
|
+
require 'debug/server' # introduce remote debugging feature
|
264
|
+
DEBUGGER__.open(port: 12345)
|
265
|
+
# or DEBUGGER__.open_tcp(port: 12345)
|
266
|
+
|
267
|
+
$ ruby target.rb
|
67
268
|
Debugger can attach via TCP/IP (localhost:12345)
|
68
269
|
...
|
69
270
|
```
|
70
271
|
|
71
|
-
|
272
|
+
You can also specify the host with the `RUBY_DEBUG_HOST` environment variable. And also `DEBUGGER__.open` method accepts a `host:` keyword parameter. If the host is not given, `localhost` will be used.
|
273
|
+
|
274
|
+
To attach the debuggee process, specify the port number (and hostname if needed) for the `rdbg --attach` (or `rdbg -A`) command.
|
72
275
|
|
73
276
|
```
|
74
|
-
$
|
277
|
+
$ rdbg --attach 12345
|
278
|
+
$ rdbg --attach hostname 12345
|
75
279
|
```
|
76
280
|
|
77
|
-
|
281
|
+
### Initial scripts
|
282
|
+
|
283
|
+
If there are `.rdbgrc` files are there at the current directory and the home directory, files are loaded as initial scripts which contains debugger commands. `RUBY_DEBUG_INIT_SCRIPT` environment variable can specify the initial script file.
|
78
284
|
|
285
|
+
Initial scripts are evaluted at the first suspend timing (generally, it is the beggining of the target script). For example, you can set break points with `break file:123`.
|
79
286
|
|
80
|
-
|
287
|
+
If there are `.rdbgrc.rb` files at the current directory and the home directory, files are loaded as a ruby script at the initializing timing.
|
288
|
+
|
289
|
+
### Environment variables
|
290
|
+
|
291
|
+
You can control debuggee's behavior with environment variables:
|
292
|
+
|
293
|
+
* `RUBY_DEBUG_NONSTOP`: 1 for nonstop at the beggining of program.
|
294
|
+
* `RUBY_DEBUG_INIT_SCRIPT`: Initial script path loaded at the first stop.
|
295
|
+
* `RUBY_DEBUG_COMMANDS`: Debug commands invoked at the first stop. Commands should be separated by ';;'.
|
296
|
+
* `RUBY_DEBUG_SHOW_SRC_LINES`: Show n lines source code on breakpoint (default: 10 lines).
|
297
|
+
* `RUBY_DEBUG_SHOW_FRAMES`: Show n frames on breakpoint (default: 2 frames).
|
298
|
+
|
299
|
+
* Remote debugging
|
300
|
+
* `RUBY_DEBUG_PORT`: TCP/IP remote debugging: port to open.
|
301
|
+
* `RUBY_DEBUG_HOST`: TCP/IP remote debugging: host (localhost if not given) to open.
|
302
|
+
* `RUBY_DEBUG_SOCK_DIR`: UNIX Domain Socket remote debugging: socket directory to open.
|
303
|
+
|
304
|
+
## Debug command on the debug console
|
81
305
|
|
82
306
|
* `Enter` repeats the last command (useful when repeating `step`s).
|
83
307
|
* `Ctrl-D` is equal to `quit` command.
|
308
|
+
* [debug command compare sheet - Google Sheets](https://docs.google.com/spreadsheets/d/1TlmmUDsvwK4sSIyoMv-io52BUUz__R5wpu-ComXlsw0/edit?usp=sharing)
|
309
|
+
|
310
|
+
You can use the following debug commands. Each command should be written in 1 line.
|
311
|
+
The `[...]` notation means this part can be elimiante. For example, `s[tep]` means `s` or `step` are valid command. `ste` is not valid.
|
312
|
+
The `<...>` notation means the argument.
|
84
313
|
|
85
314
|
### Control flow
|
86
315
|
|
@@ -92,10 +321,10 @@ tries to connect with given host (`localhost`) and port (`12345`). You can elimi
|
|
92
321
|
* Finish this frame. Resume the program until the current frame is finished.
|
93
322
|
* `c[ontinue]`
|
94
323
|
* Resume the program.
|
95
|
-
* `q[uit]` or `Ctrl-D`
|
96
|
-
* Finish debugger (with
|
97
|
-
* `kill`
|
98
|
-
* Stop the debuggee
|
324
|
+
* `q[uit]` or exit or `Ctrl-D`
|
325
|
+
* Finish debugger (with the debuggee process on non-remote debugging).
|
326
|
+
* `kill` or `q[uit]!`
|
327
|
+
* Stop the debuggee process.
|
99
328
|
|
100
329
|
### Breakpoint
|
101
330
|
|
@@ -103,19 +332,61 @@ tries to connect with given host (`localhost`) and port (`12345`). You can elimi
|
|
103
332
|
* Show all breakpoints.
|
104
333
|
* `b[reak] <line>`
|
105
334
|
* Set breakpoint on `<line>` at the current frame's file.
|
106
|
-
* `b[reak] <file>:<line>`
|
335
|
+
* `b[reak] <file>:<line>` or `<file> <line>`
|
107
336
|
* Set breakpoint on `<file>:<line>`.
|
337
|
+
* `b[reak] <class>#<name>`
|
338
|
+
* Set breakpoint on the method `<class>#<name>`.
|
339
|
+
* `b[reak] <expr>.<name>`
|
340
|
+
* Set breakpoint on the method `<expr>.<name>`.
|
341
|
+
* `b[reak] ... if <expr>`
|
342
|
+
* break if `<expr>` is true at specified location.
|
343
|
+
* `b[reak] if <expr>`
|
344
|
+
* break if `<expr>` is true at any lines.
|
345
|
+
* Note that this feature is super slow.
|
108
346
|
* `catch <Error>`
|
109
347
|
* Set breakpoint on raising `<Error>`.
|
348
|
+
* `watch <expr>`
|
349
|
+
* Stop the execution when the result of <expr> is changed.
|
350
|
+
* Note that this feature is super slow.
|
110
351
|
* `del[ete]`
|
111
352
|
* delete all breakpoints.
|
112
353
|
* `del[ete] <bpnum>`
|
113
354
|
* delete specified breakpoint.
|
114
355
|
|
115
|
-
###
|
356
|
+
### Information
|
116
357
|
|
117
358
|
* `bt` or `backtrace`
|
118
|
-
* Show backtrace information.
|
359
|
+
* Show backtrace (frame) information.
|
360
|
+
* `l[ist]`
|
361
|
+
* Show current frame's source code.
|
362
|
+
* Next `list` command shows the successor lines.
|
363
|
+
* `l[ist] -`
|
364
|
+
* Show predecessor lines as opposed to the `list` command.
|
365
|
+
* `l[ist] <start>` or `l[ist] <start>-<end>`
|
366
|
+
* Show current frame's source code from the line <start> to <end> if given.
|
367
|
+
* `edit`
|
368
|
+
* Open the current file on the editor (use `EDITOR` environment variable).
|
369
|
+
* Note that editted file will not be reloaded.
|
370
|
+
* `edit <file>`
|
371
|
+
* Open <file> on the editor.
|
372
|
+
* `i[nfo]`
|
373
|
+
* Show information about the current frame (local variables)
|
374
|
+
* It includes `self` as `%self` and a return value as `%return`.
|
375
|
+
* `i[nfo] <expr>`
|
376
|
+
* Show information about the result of <expr>.
|
377
|
+
* `display`
|
378
|
+
* Show display setting.
|
379
|
+
* `display <expr>`
|
380
|
+
* Show the result of `<expr>` at every suspended timing.
|
381
|
+
* `undisplay`
|
382
|
+
* Remove all display settings.
|
383
|
+
* `undisplay <displaynum>`
|
384
|
+
* Remove a specified display setting.
|
385
|
+
* `trace [on|off]`
|
386
|
+
* enable or disable line tracer.
|
387
|
+
|
388
|
+
### Frame control
|
389
|
+
|
119
390
|
* `f[rame]`
|
120
391
|
* Show current frame.
|
121
392
|
* `f[rame] <framenum>`
|
@@ -133,30 +404,61 @@ tries to connect with given host (`localhost`) and port (`12345`). You can elimi
|
|
133
404
|
* Evaluate like `pp <expr>` on the current frame.
|
134
405
|
* `e[val] <expr>`
|
135
406
|
* Evaluate `<expr>` on the current frame.
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
* `list`
|
140
|
-
* Show current frame's source code.
|
141
|
-
* `info l[ocal[s]]`
|
142
|
-
* Show current frame's local variables. It includes `self` as `%self` and a return value as `%return`.
|
143
|
-
* `info i[nstance]` or `info ivars`
|
144
|
-
* Show current frame's insntance variables.
|
145
|
-
* `display`
|
146
|
-
* Show display setting.
|
147
|
-
* `display <expr>`
|
148
|
-
* Add `<expr>` at suspended timing.
|
149
|
-
* `undisplay`
|
150
|
-
* Remove all display settings.
|
151
|
-
* `undisplay <displaynum>`
|
152
|
-
* Remove a specified display setting.
|
153
|
-
* `trace [on|off]`
|
154
|
-
* enable or disable line tracer.
|
407
|
+
* `irb`
|
408
|
+
* Invoke `irb` on the current frame.
|
155
409
|
|
156
410
|
### Thread control
|
157
411
|
|
158
|
-
* `th[read]
|
412
|
+
* `th[read]`
|
159
413
|
* Show all threads.
|
160
414
|
* `th[read] <thnum>`
|
161
|
-
* Switch thread specified by `<thnum
|
415
|
+
* Switch thread specified by `<thnum>`.
|
416
|
+
|
417
|
+
### Help
|
418
|
+
|
419
|
+
* `h[elp]`
|
420
|
+
* Show help for all commands.
|
421
|
+
* `h[elp] <command>`
|
422
|
+
* Show help for the given command.
|
423
|
+
|
424
|
+
|
425
|
+
## rdbg command help
|
426
|
+
|
427
|
+
```
|
428
|
+
exe/rdbg [options] -- [debuggee options]
|
429
|
+
|
430
|
+
Debug console mode:
|
431
|
+
-n, --nonstop Do not stop at the beggining of the script.
|
432
|
+
-e [COMMAND] execute debug command at the beggining of the script.
|
433
|
+
-O, --open Start debuggee with opning the debagger port.
|
434
|
+
If TCP/IP options are not given,
|
435
|
+
a UNIX domain socket will be used.
|
436
|
+
--port=[PORT] Listening TCP/IP port
|
437
|
+
--host=[HOST] Listening TCP/IP host
|
438
|
+
|
439
|
+
Debug console mode runs Ruby program with the debug console.
|
440
|
+
|
441
|
+
exe/rdbg target.rb foo bar starts like 'ruby target.rb foo bar'.
|
442
|
+
exe/rdbg -- -r foo -e bar starts like 'ruby -r foo -e bar'.
|
443
|
+
exe/rdbg -O target.rb foo bar starts and accepts attaching with UNIX domain socket.
|
444
|
+
exe/rdbg -O --port 1234 target.rb foo bar starts accepts attaching with TCP/IP localhost:1234.
|
445
|
+
exe/rdbg -O --port 1234 -- -r foo -e bar starts accepts attaching with TCP/IP localhost:1234.
|
446
|
+
|
447
|
+
Attach mode:
|
448
|
+
-A, --attach Attach to debuggee process.
|
449
|
+
|
450
|
+
Attach mode attaches the remote debug console to the debuggee process.
|
451
|
+
|
452
|
+
'exe/rdbg -A' tries to connect via UNIX domain socket.
|
453
|
+
If there are multiple processes are waiting for the
|
454
|
+
debugger connection, list possible debuggee names.
|
455
|
+
'exe/rdbg -A path' tries to connect via UNIX domain socket with given path name.
|
456
|
+
'exe/rdbg -A port' tries to connect localhost:port via TCP/IP.
|
457
|
+
'exe/rdbg -A host port' tris to connect host:port via TCP/IP.
|
458
|
+
|
459
|
+
```
|
460
|
+
|
461
|
+
# Contributing
|
462
|
+
|
463
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/debug.
|
162
464
|
|