* aclib #23 - デバッグ支援機能について -(by [[K]], 2020.10.08) ** (1) memo -全般: --[1-1]オブジェクトをinit/openしていないうちに使おうとするとエラーになる。 --[1-2]オブジェクトをdeinit/closeしないうちにそのメモリ範囲をほかの用途に使おうとするとエラーになる。 --[1-3]init/openしていない領域に対して、deinit/closeするとエラーになる。 --[1-4]自動deinitや自動closeが使える。 -簡易モニタにて: --[2-1]利用中のメモリ容量を確認できる。 --[2-2]生きているオブジェクト一覧や生きているmalloc領域一覧も出せる。 --[2-3]メモリリークも確認できる。 --[2-4]オブジェクトの中身を表示できる。 -クラス開発者向けのサービス(C言語なので厳密にはクラスではなく構造体だけど): --[3-1]アプリから渡されたオブジェクトポインタが有効なものかをチェックできる。 --[3-2]アプリから渡されたメモリ域は問題なくアクセスできるのかどうかをチェックできる。 ** (2) C++との比較 -[1-1]に対して: C++ならコンストラクタ・デストラクタがあるので、そもそもinitし忘れて使うということはめったに起こらない。 //--C++の場合、グローバル変数域にオブジェクトを置いた場合、当然main()に入る前にコンストラクタが呼ばれるが、その呼び出し順序は規定されない。したがって、呼び出し順序が重要な場合は、自前で苦労してコンストラクタを呼び出さなければいけない。 -[1-4]に対して: RAIIを使えば自動deinitや自動close相当のことがもっとエレガントにできる。 ** (3) デバッガとの比較 -[2-3]に対して: メモリリーク検出機能を持っているCRTもあるらしい。 -[2-4]に対して: 優秀なデバッガはメモリ上のオブジェクトのメンバの値を自由に表示できるが、しかし適切な形式に整形して表示することができない。aclライブラリの場合は、表示はクラスライブラリ内のデバッグ機能を使って行うので、表示は整えられる。しかしクラスライブラリが対応していなければメモリダンプしか出せない。 * こめんと欄 #comment