デバック作業の手順について
最近仕事でデバック作業に時間がかかりすぎている事がずっと気になっていたので、一回デバックの正しい流れとかあるのか調べてみた。
上記記事を読んで思ったのは、やはりデバック手順をルーチン化することも大切なのではという事です。
- 原因究明
- 再現手順の整理
- 再現箇所と再現時の関数入力、出力値の確認
- ダメな場合は1に戻る
最低限これだけはやっておくべきなのかとも思いまた。
後、確認方法は今もやっている事ですが、デバックモードで気になるところにブレークポイントをかけ、ステップイン、アウトで順次処理を見ていくのが一番いいのかなと思います。
気にすべきことは上記だけかなと思ったら、ほかの記事を読んで
「スタックトレース」なる言葉を発見
デバッグのヒント教えます(2):スタックトレースからデバッグのヒントを読み取る - @IT
エラーコードには”エラーが発生するまでの過程”が記されていて、それを「スタックトレース」と呼ぶらしいです。
(今までエラーコード自体を検索かけてどんなエラーか認識するくらいしかしてなかったです…)
この際大切なことは”自分の作った関数に関する記述”。今まで動いていたシステムに組み込んだ自分の関数等はバグを生む原因になり得やすく、注目すべきという事だろうか。
どの関数が呼ばれた後にエラーが出たのか等わかればよりスムーズにデバックが進みますね。今後はエラーメッセージをもっと読むように心掛けるべきですね
しかし自分はファームウェアを扱っているので、これだけでなくハード面も気にしてオシロスコープの扱い方も知る必要があるのかなと思いました。
安いオシロとかないんかね…
C#での数値表示について
- TextBoxとLabelについて
電卓アプリを作っていて気づかされた事
ずっとTextBoxを電卓の数値入力場所にしていたんですが、数字&小数点1個のみ受け付けて文字は弾くようにしたいのに出来ませんでした。
そこで知人の鶴の一声「それ、Labelでよくね?」
た…確かに…。はい、うまくいきました。Labelだとアプリユーザの直接入力がまずできないので、ボタン入力のみ受け付けて、文字入力を弾く事に成功。
まぁTextBoxでも入力不可にする方法はおいおい探っていきたいです
コード作成 備忘録 : 構造体のキャスト、マスク化、OR演算、補数計算
- 構造体から別の構造体へのキャスト
注意すべきことは
・キャスト対象の構造体の総バイト数と、キャスト後の構造体の総バイト数が同じである事
- マスク化
必要なビット以外をOFF(0)にする演算を「マスク化」と言う。この演算には"AND(&)"を使用する。
演算対象と同じヒット数の二進数を用意し、そのままの値にしたいところを"1"、OFFにしたい所を"0"にして&演算を行う。
また、マスク化の対関係となる演算として、特定のビットをON(1)にする演算を「セット」と言う。この演算は"OR(||)"を使用する。
演算対象と同じビット数の二進数を用意し、ONにしたい所を"1"、そのままにしたい所を"0"にしてOR演算を行う。
最後に、全ビットを無条件で反転させる演算を補数演算と言う。この演算は"~"を使用する。
対象ビットの前に"~"を付け、"~a"の様に書き使用する。これにより全ビットが反転する。
キーボードLED等の技術についてもゆくゆくまとめる
用語備忘録: 仕様書と設計書について
以下2つのサイトがなんかわかりやすかったので参考にしました
一つ目のサイトの最初に書いてたことがしっくりきた
- 仕様書:「WHAT?何がしたいのか?」について書かれたもの
- 設計書:「HOW?どのように作るのか?」について書かれたもの
これは正直理解していなかった。だから仕様書に書いてたコマンド一覧とかを関数と勝手に解釈してひとつひとつのコマンド用関数を実装したりしましたし…
んで、上記サイトに書いている文書の中で、仕様書、設計書を書く意味についてこんな文章があった
「今後システムを修正・更新していく際に、作業の見積もりや変更により影響の測定ができる資料でなくては意味がない」
仕様書を読んで「どんな事ができるシステムなのか」「どんな環境を想定して作成されるシステムなのか」を知り、設計書を読んで「どのような手順で、どんな構造で作成すればよいのか」を知る。そう想定された資料なのだそうだ
この考え方は資料作成の基礎となるものなので覚えておこうと思う
用語の備忘録: 公開APIの定義
アプリケーションからOS等のプラットフォーム機能を利用したい時の橋渡し的存在となる
wikipedia:プログラミングの際に使用できる命令や規約、関数等の集合の事(こっちの方がしっくりくる)
APIとは?FinTechで加速するAPI公開とオープンイノベーション
- 公開API
ヘッダファイルに宣言を明記し、ユーザに存在を周知したもののことをさすと言う話を聞きました