困ったら戻る1ページ。症状別に、関連リンクを一覧化。
Ctrl+F(ページ内検索)でも探せるようにしている。追加分はこの表へ反映していく。
- 下の表は、いまの状況に近い行から関連リンクへつながる
- 表の左端に 「Ctrl+F用キーワード」 を置いてあり、ページ内検索でも行を見つけられる(例:
固まるSaveChanges文字化け使用中) - すぐ止めたい・まず落ち着かせたいときは 「15分でやること(順番)」 が使える
- 相談・問い合わせ・引き継ぎでは 「状況メモ(5つ)」 をそのまま貼れる
症状から引く(逆引き)
15分でやること(順番)
最初の15分は 影響を止める → 証拠を残す → 条件を同じにする の順。
順番を入れ替えると、比較が崩れて戻りが増える。
貼る用(テキスト)
[15分]
1) 影響を止める:直近の差分を狭める/対象を絞る/再試行で悪化しない状態を作る
2) 証拠を残す:例外・入力条件・所要時間を残す/1操作を追える印を付ける(操作IDなど)
3) 条件を同じにする:端末差・設定差・バージョン差を疑う/再現条件をメモし、検証のたびに同じ条件で試す
-
影響を止める
直近の差分を狭める。対象を絞る。再試行で悪化しない状態を先に作る。 -
証拠を残す
例外・入力条件・所要時間を残す。1操作を追える印も付ける(操作IDなど)。 -
条件を同じにする
端末差/設定差/バージョン差を一度疑う。再現する条件をメモに残し、検証のたびに同じ条件で試す。
代表ケース(短い例)
ケース1:catchで握り潰している
スタックが消えると、調査が止まる。
避けたい例
try
{
DoWork();
}
catch (Exception)
{
// 何も残らない
}
こう書く
try
{
DoWork();
}
catch (Exception ex)
{
LogError(ex);
throw; // スタック保持
}
関連:
ケース2:UIスレッドで待っている
Result/Wait はUIを止めやすい。
避けたい例
var result = GetAsync().Result;
こう書く
var result = await GetAsync();
関連:
ケース3:タイムアウトが無い
上限が無い待ちは、調査も終わらない。
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
var body = await client.GetStringAsync(url, cts.Token);
関連:
チェックリスト(レビューで見るところ)
表の内容を短く貼れる形にしておく。
貼る用(テキスト)
[レビュー観点]
- 例外:catchで握り潰さない/throw;でスタックを残す
- ログ:入力条件・所要時間・操作IDが残る
- 待ち:タイムアウトがある/キャンセルが通る/無限待ちにならない
- null:外から入った値を受けた直後でGuardする
- UI/非同期:UIスレッドでResult/Waitしない/async voidの扱いが決まっている
- 寿命管理:Disposeと解除がどこで走るか説明できる
- Win32/WndProc:既定処理を抜かない/重い処理を入れない
- 依存:参照の向きと配布単位が説明できる
| 観点 | 確認ポイント(会話で言える形) | 関連 |
|---|---|---|
| 例外 | catchで握り潰していない / throw; でスタックを残す |
R04 例外設計:catch握り潰し禁止とthrow; |
| ログ | 1操作を追える印がある(操作IDなど) / 入力条件と所要時間が残る | R05 ログ設計:再現不能を減らす三点セット |
| 待ち | タイムアウトがある / キャンセルが通る / 無限待ちにならない | R10 タイムアウトとキャンセル:無限待ちを切る |
| null | 外から入った値を受けた直後でGuardする | R09 NullReferenceExceptionを止める:null許容参照/Guard |
| UI/非同期 | UIスレッドで Result/Wait を使わない / async void の扱いが決まっている |
R06 非同期の掟:await帰還/デッドロック |
| 寿命管理 | Disposeと解除がどこで走るか説明できる |
R07 WinForms寿命管理:Dispose/終了経路 R11 「別のプロセスが使用中です」を解消:IDisposable/using |
| Win32/WndProc | 既定処理を抜かない / 重い処理を入れない | G12 WndProc入門:WM_*と既定処理 |
| 依存 | 参照の向きと配布単位が説明できる |
E02 NuGet競合:参照崩壊の止血と恒久対策 K27 参照地獄の終わらせ方:向き/境界/配布単位 |
状況メモ(5つ)
調査が長引くと、何が分かっていて何が未確認かがズレやすい。
最初に5つだけ残すと、相談・問い合わせ・引き継ぎが速い。
貼る用(テキスト)
[状況メモ]
1) 症状:何が起きているか(固まる/落ちる/反映されない…)
2) 発火点:どの操作・どの画面・どの入力で起きるか
3) 証拠:例外/ログ/所要時間/操作IDの有無
4) 条件:端末・設定・バージョン・タイムゾーンなど
5) 直近差分:直近の変更(コード/配布/設定)
関連リンク
- 公開済リンク一覧: S00 C#達人への道(門前の誓い)連載Index
- 用語で迷うとき: S01 C#/.NET 用語集:現場で詰まりやすい単語を先に潰す
このページは症状別リンク集。全体一覧と最新版リンクはS00に集約。
推奨タグ: C# .NET WinForms トラブルシューティング 設計