debugtrace 0.3.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README_ja.md ADDED
@@ -0,0 +1,590 @@
1
+ # DebugTrace-rb
2
+
3
+ [English](README.md)
4
+
5
+ **DebugTrace-rb** は、Rubyのデバッグ時にトレースログを出力するライブラリで、 Ruby 3.1.0以降で利用できます。
6
+ メソッドの開始と終了箇所に`DebugTrace.enter`および`DebugTrace.leave` を埋め込む事で、開発中のRubyプログラムの実行状況を出力する事ができます。
7
+
8
+ ## 1. 特徴
9
+
10
+ * 呼び出し元のメソッド名、ソースファイル名および行番号を自動的に出力。
11
+ * メソッドやオブジェクトのネストで、ログを自動的にインデント 。
12
+ * 値の出力で自動的に改行。
13
+ * リフレクションを使用してオブジェクト内容の出力が可能。
14
+ * `debugtrace.yml`ファイルの設定で、出力内容のカスタマイズが可能。
15
+
16
+ ## 2. インストール
17
+
18
+ 次のコマンドを実行して、gemをインストールし、アプリケーションのGemfileに追加します。
19
+
20
+ ```bash
21
+ $ bundle add debugtrace
22
+ ```
23
+
24
+ 依存関係の管理にbundlerを使用していない場合は、次のコマンドを実行して gem をインストールします。
25
+
26
+ ```bash
27
+ $ gem install debugtrace
28
+ ```
29
+
30
+ ## 3. 使用方法
31
+
32
+ デバッグ対象および関連するメソッドに対して以下を行います。
33
+
34
+ 1. メソッドの先頭に`DebugTrace.enter`を挿入する。
35
+ 1. メソッドの終了(または`return`文の直前)に`DebugTrace.leave`を挿入する。
36
+ 1. 必要に応じて、引数、ローカル変数、戻り値をログに出力する`DebugTrace.print('foo', foo)`を挿入する。
37
+
38
+ 以下は、DebugTrace-rbのメソッドを使用したRubyの例とそれを実行した際のログです。
39
+
40
+ ```ruby
41
+ # frozen_string_literal: true
42
+ # readme-example.rb
43
+ require 'debugtrace'
44
+
45
+ class Contact
46
+ attr_reader :id, :firstName, :lastName, :birthday
47
+
48
+ def initialize(id, firstName, lastName, birthday)
49
+ DebugTrace.enter
50
+ @id = id
51
+ @firstName = firstName
52
+ @lastName = lastName
53
+ @birthday = birthday
54
+ DebugTrace.leave
55
+ end
56
+ end
57
+
58
+ def func2
59
+ DebugTrace.enter
60
+ contacts = [
61
+ Contact.new(1, 'Akane' , 'Apple', Date.new(1991, 2, 3)),
62
+ Contact.new(2, 'Yukari', 'Apple', Date.new(1992, 3, 4))
63
+ ]
64
+ DebugTrace.print('contacts', contacts)
65
+ DebugTrace.leave
66
+ end
67
+
68
+ def func1
69
+ DebugTrace.enter
70
+ DebugTrace.print('Hello, World!')
71
+ func2
72
+ DebugTrace.leave
73
+ end
74
+
75
+ func1
76
+ ```
77
+
78
+ ```log
79
+ 2025-05-17 20:38:04.084+09:00 DebugTrace-rb 1.0.0 on Ruby 3.4.4
80
+ 2025-05-17 20:38:04.084+09:00 config file: <No config file>
81
+ 2025-05-17 20:38:04.084+09:00 logger: StdErrLogger
82
+ 2025-05-17 20:38:04.084+09:00
83
+ 2025-05-17 20:38:04.084+09:00 ______________________________ #72 ______________________________
84
+ 2025-05-17 20:38:04.084+09:00
85
+ 2025-05-17 20:38:04.085+09:00 Enter func1 (readme-example.rb:30) <- <main> (readme-example.rb:36)
86
+ 2025-05-17 20:38:04.085+09:00 | Hello, World! (readme-example.rb:31)
87
+ 2025-05-17 20:38:04.085+09:00 | Enter func2 (readme-example.rb:20) <- func1 (readme-example.rb:32)
88
+ 2025-05-17 20:38:04.085+09:00 | | Enter initialize (readme-example.rb:10) <- new (readme-example.rb:22)
89
+ 2025-05-17 20:38:04.085+09:00 | | Leave initialize (readme-example.rb:15) duration: 0.015 ms
90
+ 2025-05-17 20:38:04.085+09:00 | |
91
+ 2025-05-17 20:38:04.085+09:00 | | Enter initialize (readme-example.rb:10) <- new (readme-example.rb:23)
92
+ 2025-05-17 20:38:04.085+09:00 | | Leave initialize (readme-example.rb:15) duration: 0.010 ms
93
+ 2025-05-17 20:38:04.085+09:00 | |
94
+ 2025-05-17 20:38:04.085+09:00 | | contacts = [
95
+ 2025-05-17 20:38:04.085+09:00 | | Contact{
96
+ 2025-05-17 20:38:04.085+09:00 | | @id: 1, @firstName: 'Akane', @lastName: 'Apple', @birthday: 1991-02-03
97
+ 2025-05-17 20:38:04.085+09:00 | | },
98
+ 2025-05-17 20:38:04.085+09:00 | | Contact{
99
+ 2025-05-17 20:38:04.085+09:00 | | @id: 2, @firstName: 'Yukari', @lastName: 'Apple', @birthday: 1992-03-04
100
+ 2025-05-17 20:38:04.085+09:00 | | }
101
+ 2025-05-17 20:38:04.085+09:00 | | ] (readme-example.rb:25)
102
+ 2025-05-17 20:38:04.085+09:00 | |
103
+ 2025-05-17 20:38:04.085+09:00 | Leave func2 (readme-example.rb:26) duration: 0.789 ms
104
+ 2025-05-17 20:38:04.085+09:00 Leave func1 (readme-example.rb:33) duration: 0.937 ms
105
+ ```
106
+
107
+ ### 4. メソッド一覧
108
+
109
+ DebugTraceモジュールには以下のメソッドがあります。
110
+
111
+ <table>
112
+ <caption>メソッド一覧</caption>
113
+ <tr>
114
+ <th style="text-align:center">メソッド名</th>
115
+ <th style="text-align:center">引 数</th>
116
+ <th style="text-align:center">戻り値</th>
117
+ <th style="text-align:center">説 明</th>
118
+ </tr>
119
+ <tr>
120
+ <td><code>enter</code></td>
121
+ <td>なし</td>
122
+ <td>なし</td>
123
+ <td>メソッドの開始のログを出力する</td>
124
+ </tr>
125
+ <tr>
126
+ <td><code>leave</code></td>
127
+ <td><code>return_value</code>: このメソッドの戻り値 <small>(省略可)</small></td>
128
+ <td><code>return_value</code> <small>(引数が省略された場合は<code>nil</code>)</small></td>
129
+ <td>メソッドの終了のログを出力する</td>
130
+ </tr>
131
+ <tr>
132
+ <td><code>print</code></td>
133
+ <td>
134
+ <code>name</code>: 値の名前<br>
135
+ <code>value</code>: 値 <small>(省略可)</small><br>
136
+ <small><i>以降の引数は、キーワード引数で省略可</i></small><br>
137
+ <code>reflection</code>: <code>true</code>ならリフレクションを積極的に使用、<code>false</code>なら消極的に使用 <small>(デフォルト: <code>false</code>)</small><br>
138
+ <small><i>以降の引数は、debugtrace.ymlで指定可能 (引数指定が優先)</i></small><br>
139
+ <code>minimum_output_size</code>: <code>Array</code>, <code>Hash</code>および<code>Set</code>の要素数を出力する最小要素数<br>
140
+ <code>minimum_output_length</code>: 文字列の長さを出力する最小の長さ<br>
141
+ <code>collection_limit</code>: <code>Map</code>, <code>Hash</code>および<code>Set</code>の要素の出力数の制限値<br>
142
+ <code>string_limit</code>: 文字列の出力文字数の制限値<br>
143
+ <code>reflection_limit</code>: リフレクションのネスト数の制限値<br>
144
+ </td>
145
+ <td>値の指定があれば引数値、なければ<code>nil</code></td>
146
+ <td>
147
+ 値の指定があれば、<br>
148
+ <code><値の名前> = <値></code><br>
149
+ の形式でログに出力し、なければ<code>name</code>をメッセージとして出力する。
150
+ </td>
151
+ </tr>
152
+ </table>
153
+
154
+ ### 5. debugtrace.ymlのプロパティ
155
+
156
+ 環境変数`DEBUGTRACE_CONFIG`で、debugtrace.ymlのパスを指定できます。
157
+ デフォルトのパスは、`./debugtrace.yml`です。
158
+ debugtrace.ymlには以下のプロパティを指定できます。
159
+
160
+ <table>
161
+ <caption>debugtrace.yml</caption>
162
+ <tr>
163
+ <th style="text-align:center">プロパティ名</th>
164
+ <th style="text-align:center">説 明</th>
165
+ </tr>
166
+ <tr>
167
+ <td><code>logger</code></td>
168
+ <td>
169
+ ログの出力先の指定<br>
170
+ <small><b>設定例:</b></small>
171
+ <ul>
172
+ <code>logger: stdout</code> - <small>標準出力</small><br>
173
+ <code>logger: stderr</code> - <small>標準エラー出力</small><br>
174
+ <code>logger: rubylogger</code> - <small>RubyのLoggerクラスを使用</small><br>
175
+ <code>logger: file</code> - <small>指定のファイル</small>
176
+ </ul>
177
+ <small><b>初期値:</b></small>
178
+ <ul>
179
+ <code>stderr</code>
180
+ </ul>
181
+ </td>
182
+ </tr>
183
+ <tr>
184
+ <td><code>log_path</code></td>
185
+ <td>
186
+ <code>logger: rubylogger</code>または<code>logger: file</code>の場合のログの出力先のパス<br>
187
+ <code>logger: file</code>の場合で先頭文字が<code>+</code>の場合は、ログを追記します。
188
+ <small><b>設定例:</b></small>
189
+ <ul>
190
+ <code>logger: file</code><br>
191
+ <code>log_path: +/var/log/debugtrace.log</code><br>
192
+ </ul>
193
+ <small><b>初期値:</b></small>
194
+ <ul>
195
+ <code>debugtrace.log</code>
196
+ </ul>
197
+ </td>
198
+ </tr>
199
+ <tr>
200
+ <td><code>rubylogger_format</code></td>
201
+ <td>
202
+ Rubyの<code>Logger</code>クラスを使用する際のフォーマット文字列<br>
203
+ <small><b>設定例:</b></small>
204
+ <ul>
205
+ <code>rubylogger_format: "%2$s %1$s %3$s %4$s\n"</code>
206
+ </ul>
207
+ <small><b>パラメータ:</b></small><br>
208
+ <ul>
209
+ <code>%1</code>: ログレベル <small>(DEBUG)</small><br>
210
+ <code>%2</code>: 日時<br>
211
+ <code>%3</code>: プログラム <small>(DebugTrace)</small><br>
212
+ <code>%4</code>: メッセージ
213
+ </ul>
214
+ <small><b>初期値:</b></small>
215
+ <ul>
216
+ <code>rubylogger_format: "%2$s %1$s %4$s\n"</code>
217
+ </ul>
218
+ <small><b>参考:</b></small><br>
219
+ <ul>
220
+ <code><a href="https://docs.ruby-lang.org/ja/latest/class/Logger.html">class Logger</code>
221
+ </ul>
222
+ </td>
223
+ </tr>
224
+ <tr>
225
+ <td><code>log_datetime_format</code></td>
226
+ <td>
227
+ ログの日時のフォーマット<br>
228
+ <small><b>設定例:</b></small>
229
+ <ul>
230
+ <code>log_datetime_format: "%Y/%m/%d %H:%M:%S.%L%"</code>
231
+ </ul>
232
+ <small><b>初期値:</b></small>
233
+ <ul>
234
+ <code>log_datetime_format: "%Y-%m-%d %H:%M:%S.%L%:z"</code>
235
+ </ul>
236
+ <small><b>参考:</b></small><br>
237
+ <ul>
238
+ <code><a href="https://docs.ruby-lang.org/ja/latest/method/Date/s/_strptime.html">Date._strptime</code>
239
+ </ul>
240
+ </td>
241
+ </tr>
242
+ <tr>
243
+ <td><code>enabled</code></td>
244
+ <td>
245
+ <code>true</code>ならログ出力が有効、<code>false</code>なら無効<br>
246
+ <small><b>設定例:</b></small>
247
+ <ul>
248
+ <code>enabled: false</code>
249
+ </ul>
250
+ <small><b>初期値:</b></small>
251
+ <ul>
252
+ <code>enabled: true</code>
253
+ </ul>
254
+ </td>
255
+ </tr>
256
+ <tr>
257
+ <td><code>enter_format</code></td>
258
+ <td>
259
+ メソッドの開始時に出力するログのフォーマット<br>
260
+ <small><b>設定例:</b></small>
261
+ <ul>
262
+ <code>enter_format: "┌ %1$s (%2$s:%3$d)"</code>
263
+ </ul>
264
+ <small><b>パラメータ:</b></small><br>
265
+ <ul>
266
+ <code>%1</code>: メソッド名<br>
267
+ <code>%2</code>: ファイル名<br>
268
+ <code>%3</code>: 行番号<br>
269
+ <code>%4</code>: 呼び出し元メソッドのメソッド名<br>
270
+ <code>%5</code>: 呼び出し元メソッドのファイル名<br>
271
+ <code>%6</code>: 呼び出し元メソッドの行番号
272
+ </ul>
273
+ <small><b>初期値:</b></small>
274
+ <ul>
275
+ <code>enter_format: "Enter %1$s (%2$s:%3$d) <- %4$s (%5$s:%6$d)"</code>
276
+ </ul>
277
+ </td>
278
+ </tr>
279
+ <tr>
280
+ <td><code>leave_format</code></td>
281
+ <td>
282
+ メソッド終了時に出力するログのフォーマット<br>
283
+ <small><b>設定例:</b></small>
284
+ <ul>
285
+ <code>leave_format: "└ %1$s (%2$s:%3$d) duration: %4$.2f ms"</code>
286
+ </ul>
287
+ <small><b>パラメータ:</b></small><br>
288
+ <ul>
289
+ <code>%1</code>: メソッド名<br>
290
+ <code>%2</code>: ファイル名<br>
291
+ <code>%3</code>: 行番号<br>
292
+ <code>%4</code>: 対応する<code>enter</code>メソッドを呼び出してからの時間(ミリ秒)
293
+ </ul>
294
+ <small><b>初期値:</b></small>
295
+ <ul>
296
+ <code>leave_format: "Leave %1$s (%2$s:%3$d) duration: %4$.3f ms"</code>
297
+ </ul>
298
+ </td>
299
+ </tr>
300
+ <tr>
301
+ <td><code>thread_boundary_format</code></td>
302
+ <td>スレッド境界で出力する文字列のフォーマット<br>
303
+ <small><b>設定例:</b></small>
304
+ <ul>
305
+ <code>thread_boundary_format: "─────────────────────────────── %1$s #%2$d ──────────────────────────────"</code>
306
+ </ul>
307
+ <small><b>パラメータ:</b></small><br>
308
+ <ul>
309
+ <code>%1</code>: スレッド名<br>
310
+ <code>%2</code>: スレッドのオブジェクトID<br>
311
+ </ul>
312
+ <small><b>初期値:</b></small>
313
+ <ul>
314
+ <code>thread_boundary_format: "______________________________ %1$s #%2$d ______________________________"</code>
315
+ </ul>
316
+ </td>
317
+ </tr>
318
+ <tr>
319
+ <td><code>maximum_indents</code></td>
320
+ <td>インデントの最大数<br>
321
+ <small><b>設定例:</b></small>
322
+ <ul>
323
+ <code>maximum_indents: 16</code>
324
+ </ul>
325
+ <small><b>初期値:</b></small>
326
+ <ul>
327
+ <code>maximum_indents: 32</code>
328
+ </ul>
329
+ </td>
330
+ </tr>
331
+ <tr>
332
+ <td><code>indent_string</code></td>
333
+ <td>コードのインデント文字列<br>
334
+ <small><b>設定例:</b></small>
335
+ <ul>
336
+ <code>indent_string: "│ "</code>
337
+ </ul>
338
+ <small><b>初期値:</b></small>
339
+ <ul>
340
+ <code>indent_string: "| "</code>
341
+ </ul>
342
+ </td>
343
+ </tr>
344
+ <tr>
345
+ <td><code>data_indent_string</code></td>
346
+ <td>
347
+ データのインデント文字列<br>
348
+ <small><b>設定例:</b></small>
349
+ <ul>
350
+ <code>data_indent_string: "⧙ "</code>
351
+ </ul>
352
+ <small><b>初期値:</b></small>
353
+ <ul>
354
+ <code>data_indent_string: " "</code>
355
+ </ul>
356
+ </td>
357
+ </tr>
358
+ <tr>
359
+ <td><code>limit_string</code></td>
360
+ <td>
361
+ 制限を超えた場合に出力する文字列<br>
362
+ <small><b>設定例:</b></small>
363
+ <ul>
364
+ <code>limit_string: "‥‥"</code>
365
+ </ul>
366
+ <small><b>初期値:</b></small>
367
+ <ul>
368
+ <code>limit_string: "..."</code>
369
+ </ul>
370
+ </td>
371
+ </tr>
372
+ <tr>
373
+ <td><code>circular_reference_string</code></td>
374
+ <td>
375
+ 循環参照している場合に出力する文字列<br>
376
+ <small><b>設定例:</b></small>
377
+ <ul>
378
+ <code>circular_reference_string: "⤴ "</code>
379
+ </ul>
380
+ <small><b>初期値:</b></small>
381
+ <ul>
382
+ <code>circular_reference_string: "*** cyclic reference ***"</code>
383
+ </ul>
384
+ </td>
385
+ </tr>
386
+ <tr>
387
+ <td><code>varname_value_separator</code></td>
388
+ <td>
389
+ 変数名と値のセパレータ文字列<br>
390
+ <small><b>設定例:</b></small>
391
+ <ul>
392
+ <code>varname_value_separator: " == "</code>
393
+ </ul>
394
+ <small><b>初期値:</b></small>
395
+ <ul>
396
+ <code>varname_value_separator: " = "</code>
397
+ </ul>
398
+ </td>
399
+ </tr>
400
+ <tr>
401
+ <td><code>key_value_separator</code></td>
402
+ <td>
403
+ <code>Hash</code>のキーと値およびオブジェクトの変数名と値のセパレータ文字列<br>
404
+ <small><b>設定例:</b></small>
405
+ <ul>
406
+ <code>key_value_separato: " => "</code>
407
+ </ul>
408
+ <small><b>初期値:</b></small>
409
+ <ul>
410
+ <code>key_value_separato: ": "</code>
411
+ </ul>
412
+ </td>
413
+ </tr>
414
+ <tr>
415
+ <td><code>print_suffix_format</code></td>
416
+ <td>
417
+ <code>print</code>メソッドで付加される文字列のフォーマット<br>
418
+ <small><b>設定例:</b></small>
419
+ <ul>
420
+ <code>print_suffix_format: " (%2$s/%1$s:%3$d)"</code>
421
+ </ul>
422
+ <br>
423
+ <small><b>パラメータ:</b></small><br>
424
+ <ul>
425
+ <code>%1</code>: メソッド名<br>
426
+ <code>%2</code>: ファイル名<br>
427
+ <code>%3</code>: 行番号<br>
428
+ </ul>
429
+ <small><b>初期値:</b></small>
430
+ <ul>
431
+ <code>print_suffix_format: " (%2$s:%3$d)"</code>
432
+ </ul>
433
+ </td>
434
+ </tr>
435
+ <tr>
436
+ <td><code>size_format</code></td>
437
+ <td>
438
+ <code>Array</code>, <code>Hash</code>および<code>Set</code>の要素数の出力フォーマット<br>
439
+ <small><b>設定例:</b></small>
440
+ <ul>
441
+ <code>size_format: "(size=%d)"</code>
442
+ </ul>
443
+ <small><b>パラメータ:</b></small><br>
444
+ <ul>
445
+ <code>%1</code>: 要素数
446
+ </ul>
447
+ <small><b>初期値:</b></small>
448
+ <ul>
449
+ <code>size_format: "(size:%d)"</code>
450
+ </ul>
451
+ </td>
452
+ </tr>
453
+ <tr>
454
+ <td><code>minimum_output_size</code></td>
455
+ <td>
456
+ <code>Array</code>, <code>Hash</code>および<code>Set</code>の要素数を出力する最小数<br>
457
+ <small><b>設定例:</b></small>
458
+ <ul>
459
+ <code>minimum_output_size: 2</code>
460
+ </ul>
461
+ <small><b>初期値:</b></small>
462
+ <ul>
463
+ <code>minimum_output_size: 256</code>
464
+ </ul>
465
+ </td>
466
+ </tr>
467
+ <tr>
468
+ <td><code>length_format</code></td>
469
+ <td>
470
+ 文字列の長さの出力フォーマット<br>
471
+ <small><b>設定例:</b></small>
472
+ <ul>
473
+ <code>length_format: "(length=%d)"</code>
474
+ </ul>
475
+ <small><b>パラメータ:</b></small><br>
476
+ <ul>
477
+ <code>%1</code>: 文字列長
478
+ </ul>
479
+ <small><b>初期値:</b></small>
480
+ <ul>
481
+ <code>length_format: "(length:%d)"</code>
482
+ </ul>
483
+ </td>
484
+ </tr>
485
+ <tr>
486
+ <td><code>minimum_output_length</code></td>
487
+ <td>
488
+ 文字列の長さを出力する最小の長さ<br>
489
+ <small><b>設定例:</b></small>
490
+ <ul>
491
+ <code>minimum_output_length: 6</code>
492
+ </ul>
493
+ <small><b>初期値:</b></small>
494
+ <ul>
495
+ <code>minimum_output_length: 256</code>
496
+ </ul>
497
+ </td>
498
+ </tr>
499
+ <tr>
500
+ <td><code>data_output_width</code></td>
501
+ <td>
502
+ データの出力幅<br>
503
+ <small><b>設定例:</b></small>
504
+ <ul>
505
+ <code>data_output_width = 100</code>
506
+ </ul>
507
+ <small><b>初期値:</b></small>
508
+ <ul>
509
+ <code>data_output_width: 70</code>
510
+ </ul>
511
+ </td>
512
+ </tr>
513
+ <tr>
514
+ <td><code>bytes_count_in_line</code></td>
515
+ <td>
516
+ 文字列をバイト配列として出力する場合の1行の出力数<br>
517
+ <small><b>設定例:</b></small>
518
+ <ul>
519
+ <code>bytes_count_in_line: 32</code>
520
+ </ul>
521
+ <small><b>初期値:</b></small>
522
+ <ul>
523
+ <code>bytes_count_in_line: 16</code>
524
+ </ul>
525
+ </td>
526
+ </tr>
527
+ <tr>
528
+ <td><code>collection_limit</code></td>
529
+ <td>
530
+ Array</code>, <code>Hash</code>および<code>Set</code>の要素の出力数の制限値<br>
531
+ <small><b>設定例:</b></small>
532
+ <ul>
533
+ <code>collection_limit: 64</code>
534
+ </ul>
535
+ <small><b>初期値:</b></small>
536
+ <ul>
537
+ <code>collection_limit: 128</code>
538
+ </ul>
539
+ </td>
540
+ </tr>
541
+ <tr>
542
+ <td><code>string_limit</code></td>
543
+ <td>
544
+ 文字列の出力文字数の制限値<br>
545
+ <small><b>設定例:</b></small>
546
+ <ul>
547
+ <code>string_limit: 64</code>
548
+ </ul>
549
+ <small><b>初期値:</b></small>
550
+ <ul>
551
+ <code>string_limit: 256</code>
552
+ </ul>
553
+ </td>
554
+ </tr>
555
+ <tr>
556
+ <td><code>bytes_limit</code></td>
557
+ <td>
558
+ 文字列をバイト配列として出力する場合のの出力数の制限値<br>
559
+ <small><b>設定例:</b></small>
560
+ <ul>
561
+ <code>bytes_limit: 64</code>
562
+ </ul>
563
+ <small><b>初期値:</b></small>
564
+ <ul>
565
+ <code>bytes_limit: 256</code>
566
+ </ul>
567
+ </td>
568
+ </tr>
569
+ <tr>
570
+ <td><code>reflection_limit</code></td>
571
+ <td>
572
+ リフレクションのネスト数の制限値<br>
573
+ <small><b>設定例:</b></small>
574
+ <ul>
575
+ <code>reflection_limit: 3</code>
576
+ </ul>
577
+ <small><b>初期値:</b></small>
578
+ <ul>
579
+ <code>reflection_limit: 4</code>
580
+ </ul>
581
+ </td>
582
+ </tr>
583
+ </table>
584
+
585
+ ### 6. ライセンス
586
+
587
+ [MIT ライセンス(MIT)](LICENSE.txt)
588
+
589
+ _(C) 2025 Masato Kokubo_
590
+
@@ -0,0 +1,28 @@
1
+ logger: stdout
2
+ #logger: stderr
3
+ #logger: file
4
+ #logger: rubylogger
5
+ log_path: logs/debugtrace.log
6
+ rubylogger_format: "%2$s %1$s %3$s %4$s\n"
7
+ log_datetime_format: "%Y/%m/%d %H:%M:%S.%L"
8
+ enabled: true
9
+ enter_format: "┌ %1$s (%2$s:%3$d)"
10
+ leave_format: "└ %1$s (%2$s:%3$d) duration: %4$.2f ms"
11
+ thread_boundary_format: "─────────────────────────────── %1$s #%2$d ──────────────────────────────"
12
+ indent_string: "│ "
13
+ data_indent_string: "⧙ "
14
+ limit_string: "‥‥"
15
+ circular_reference_string: "⤴ "
16
+ varname_value_separator: " == "
17
+ key_value_separator: " => "
18
+ print_suffix_format: " (%2$s/%1$s:%3$d)"
19
+ size_format: "(size=%d)"
20
+ minimum_output_size: 2
21
+ length_format: "(length=%d)"
22
+ minimum_output_length: 6
23
+ data_output_width: 40
24
+ bytes_count_in_line: 32
25
+ collection_limit: 64
26
+ string_limit: 5
27
+ bytes_limit: 64
28
+ reflection_limit: 3
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+ # readme-example.rb
3
+ #require 'debugtrace'
4
+ require_relative '../lib/debugtrace'
5
+
6
+ class Contact
7
+ attr_reader :id, :firstName, :lastName, :birthday
8
+
9
+ def initialize(id, firstName, lastName, birthday)
10
+ DebugTrace.enter
11
+ @id = id
12
+ @firstName = firstName
13
+ @lastName = lastName
14
+ @birthday = birthday
15
+ DebugTrace.leave
16
+ end
17
+ end
18
+
19
+ def func2
20
+ DebugTrace.enter
21
+ contacts = [
22
+ Contact.new(1, 'Akane' , 'Apple', Date.new(1991, 2, 3)),
23
+ Contact.new(2, 'Yukari', 'Apple', Date.new(1992, 3, 4))
24
+ ]
25
+ DebugTrace.print('contacts', contacts)
26
+ DebugTrace.leave
27
+ end
28
+
29
+ def func1
30
+ DebugTrace.enter
31
+ DebugTrace.print('Hello, World!')
32
+ func2
33
+ DebugTrace.leave
34
+ end
35
+
36
+ func1
@@ -12,8 +12,8 @@ module Common
12
12
  # @return [String] the value
13
13
  # @raise [TypeError] if the value is not an instance of the type or the subclass of the type
14
14
  def self.check_type(value_name, value, type)
15
- raise TypeError("Argument value_name (=#{value_name}) must be a String") unless value_name.is_a?(String)
16
- raise TypeError("Argument type (=#{type}) must be a Class") unless type.is_a?(Class)
15
+ raise TypeError, "Argument value_name (=#{value_name}) must be a String" unless value_name.is_a?(String)
16
+ raise TypeError, "Argument type (=#{type}) must be a Class" unless type.is_a?(Class)
17
17
 
18
18
  error = false
19
19
  if type == FalseClass || type == TrueClass
@@ -30,7 +30,7 @@ module Common
30
30
  top_type_name = type.name.slice(0).upcase
31
31
  a = top_type_name == 'A' || top_type_name == 'I' || top_type_name == 'U' ||
32
32
  top_type_name == 'E' || top_type_name == 'O' ? 'an' : 'a'
33
- raise TypeError("Argument #{value_name} (=#{value_string}) must be #{a} #{type}")
33
+ raise TypeError, "Argument #{value_name} (=#{value_string}) must be #{a} #{type}"
34
34
  end
35
35
  return value
36
36
  end