#15 Rustで学ぶデバッグの基本
Rustのデバッグは、コンパイラの丁寧なエラーメッセージを活用することが、他の言語以上に重要になります。この記事では、Rustにおけるデバッグの基本的な方法と、専用ツールの使い方を解説します。
println!でその場の状態を確認する
println!("ageの中身: {}", age);
変数の詳しい構造まで確認したい場合は、{:?}という書き方を使います。
println!("{:?}", person);
// さらに整形して見やすく表示したい場合
println!("{:#?}", person);
{:#?}を使うと、構造体のフィールドが1行ずつインデント付きで表示され、複雑なデータでも見やすく確認できます。
コンパイラのエラーメッセージを信頼する
以前の記事でも触れた通り、Rustのコンパイラは非常に丁寧で、多くの場合「こう直すとよいかもしれません」という具体的な提案まで表示してくれます。実行前の段階でメモリ関連の重大なバグの多くを防いでくれるため、実行してから原因を探すデバッグの機会自体が、他の言語より少ない傾向にあります。
dbg!という便利なマクロ
Rustにはdbg!という、変数の値とその場所のファイル名・行数を一緒に表示してくれる便利な機能があります。
let age = dbg!(20);
// [src/main.rs:1:15] 20 = 20 のように出力される
println!と違い、dbg!は渡した値をそのまま返すため、式の途中に挟んでも処理の流れを変えずに値を確認できるのが便利な点です。
Result・Optionの中身を確認する
失敗する可能性がある処理の結果(ResultやOption)を手っ取り早く確認したい場合、unwrap()を使うとエラー時の詳しいメッセージ付きでプログラムが停止し、原因を特定しやすくなります。ただし本番のコードでunwrap()を使うと、想定外の入力でプログラムごと落ちてしまうため、デバッグ時の確認用に留め、本番のコードではmatchなどで適切に処理するようにしましょう。
Rustならではの注意点
Rustでは、コンパイルさえ通れば、他の言語で頻発するような「実行中に突然クラッシュする」種類のバグがかなり少なくなります。その分、コンパイル時のエラーメッセージとじっくり向き合うことが、Rustにおける最も重要なデバッグ作業だと言えます。
まとめ
Rustのデバッグはprintln!・dbg!が基本ですが、何よりコンパイラのエラーメッセージを丁寧に読むことが重要です。{:#?}での整形表示も活用しましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
Rustをもっと学びたい方には「実践Rust入門[言語仕様から開発手法まで]」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿