aboutsummaryrefslogtreecommitdiff
path: root/docs/ja/faq_debug.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/ja/faq_debug.md')
-rw-r--r--docs/ja/faq_debug.md131
1 files changed, 131 insertions, 0 deletions
diff --git a/docs/ja/faq_debug.md b/docs/ja/faq_debug.md
new file mode 100644
index 000000000..236f43a6e
--- /dev/null
+++ b/docs/ja/faq_debug.md
@@ -0,0 +1,131 @@
1# デバッグの FAQ
2
3<!---
4 original document: 0.12.45:docs/faq_debug.md
5 git diff 0.12.45 HEAD -- docs/faq_debug.md | cat
6-->
7
8このページは、キーボードのトラブルシューティングについての様々な一般的な質問を説明します。
9
10## デバッグ :id=debugging
11
12`rules.mk` へ `CONSOLE_ENABLE = yes` の設定をするとキーボードはデバッグ情報を出力します。デフォルトの出力は非常に限られたものですが、デバッグモードをオンにすることでデバッグ情報の量を増やすことが出来ます。キーマップの `DEBUG` キーコードを使用するか、デバッグモードを有効にする[コマンド](ja/feature_command.md)機能を使用するか、以下のコードをキーマップに追加します。
13
14```c
15void keyboard_post_init_user(void) {
16 // 希望する動作に合わせて値をカスタマイズします
17 debug_enable=true;
18 debug_matrix=true;
19 //debug_keyboard=true;
20 //debug_mouse=true;
21}
22```
23
24## デバッグツール
25
26キーボードのデバッグに使えるツールは2つあります。
27
28### QMK Toolbox を使ったデバッグ
29
30互換性のある環境では、[QMK Toolbox](https://github.com/qmk/qmk_toolbox) を使うことでキーボードからのデバッグメッセージを表示できます。
31
32### hid_listen を使ったデバッグ
33
34ターミナルベースの方法がお好みですか?PJRC が提供する [hid_listen](https://www.pjrc.com/teensy/hid_listen.html) もデバッグメッセージの表示に使用できます。ビルド済みの実行ファイルは Windows、Linux、MacOS 用が用意されています。
35
36## 独自のデバッグメッセージを送信する
37
38[カスタムコード](ja/custom_quantum_functions.md)内からデバッグメッセージを出力すると便利な場合があります。それはとても簡単です。ファイルの先頭に `print.h` のインクルードを追加します:
39
40```c
41#include "print.h"
42```
43
44その後は、いくつかの異なった print 関数を使用することが出来ます:
45
46* `print("string")`: シンプルな文字列を出力します
47* `uprintf("%s string", var)`: フォーマットされた文字列を出力します
48* `dprint("string")` デバッグモードが有効な場合のみ、シンプルな文字列を出力します
49* `dprintf("%s string", var)`: デバッグモードが有効な場合のみ、フォーマットされた文字列を出力します
50
51## デバッグの例
52
53以下は現実世界での実際のデバッグ手法の例を集めたものです。
54
55### マトリックス上のどの場所でキー押下が起こったか?
56
57移植する場合や、PCB の問題を診断する場合、キー入力が正しくスキャンされているかどうかを確認することが役立つ場合があります。この手法でのロギングを有効化するには、`keymap.c` へ以下のコードを追加します。
58
59```c
60bool process_record_user(uint16_t keycode, keyrecord_t *record) {
61 // コンソールが有効化されている場合、マトリックス上の位置とキー押下状態を出力します
62#ifdef CONSOLE_ENABLE
63 uprintf("KL: kc: 0x%04X, col: %u, row: %u, pressed: %b, time: %u, interrupt: %b, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
64#endif
65 return true;
66}
67```
68
69出力例
70```text
71Waiting for device:.......
72Listening:
73KL: kc: 169, col: 0, row: 0, pressed: 1
74KL: kc: 169, col: 0, row: 0, pressed: 0
75KL: kc: 174, col: 1, row: 0, pressed: 1
76KL: kc: 174, col: 1, row: 0, pressed: 0
77KL: kc: 172, col: 2, row: 0, pressed: 1
78KL: kc: 172, col: 2, row: 0, pressed: 0
79```
80
81### キースキャンにかかる時間の測定
82
83パフォーマンスの問題をテストする場合、スイッチマトリックスをスキャンする頻度を知ることが役立ちます。この手法でのロギングを有効化するには `config.h` へ以下のコードを追加します。
84
85```c
86#define DEBUG_MATRIX_SCAN_RATE
87```
88
89出力例
90```text
91 > matrix scan frequency: 315
92 > matrix scan frequency: 313
93 > matrix scan frequency: 316
94 > matrix scan frequency: 316
95 > matrix scan frequency: 316
96 > matrix scan frequency: 316
97```
98
99## `hid_listen` がデバイスを認識できない
100デバイスのデバッグコンソールの準備ができていない場合、以下のように表示されます:
101
102```
103Waiting for device:.........
104```
105
106デバイスが接続されると、*hid_listen* がデバイスを見つけ、以下のメッセージが表示されます:
107
108```
109Waiting for new device:.........................
110Listening:
111```
112
113この 'Listening:' のメッセージが表示されない場合は、[Makefile] を `CONSOLE_ENABLE=yes` に設定してビルドしてみてください
114
115Linux のような OS でデバイスにアクセスするには、特権が必要かもしれません。`sudo hid_listen` を試してください。
116
117多くの Linux ディストリビューションでは、次の内容で `/etc/udev/rules.d/70-hid-listen.rules` というファイルを作成することで、root として hid_listen を実行する必要がなくなります:
118
119```
120SUBSYSTEM=="hidraw", ATTRS{idVendor}=="abcd", ATTRS{idProduct}=="def1", TAG+="uaccess", RUN{builtin}+="uaccess"
121```
122
123abcd と def1 をキーボードのベンダーとプロダクト IDに置き換えてください。文字は小文字でなければなりません。`RUN{builtin}+="uaccess"` の部分は、古いディストリビューションでのみ必要です。
124
125## コンソールにメッセージが表示されない
126以下を調べてください:
127- *hid_listen* がデバイスを検出する。上記を見てください。
128- **Magic**+d を使ってデバッグを有効にする。[マジックコマンド](https://github.com/tmk/tmk_keyboard#magic-commands)を見てください。
129- `debug_enable=true` を設定します。[デバッグ](#debugging)を見てください。
130- デバッグプリントの代わりに `print` 関数を使ってみてください。**common/print.h** を見てください。
131- コンソール機能を持つ他のデバイスを切断します。[Issue #97](https://github.com/tmk/tmk_keyboard/issues/97) を見てください。