デバッグテクニックあれこれ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG条件コンパイルの定石だとか、
デバッグのことについて教えてくれ。
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNGプロファイルを行い、mallocとfreeの呼出し回数が
一致しているか調べる
# reallocしている場合、一致しないかもしれない
0009デフォルトの名無しさん
NGNG0010エラー 0、警告 0
NGNG0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNGでばっちり
0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNGVC++のSTLが量産する警告を何とかしちくり。
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGせめて malloc, realloc, strdup, free のラッパ関数
書いてチェックすれ。
メモリ周りのデバッグツールのリンク集
http://www.cs.colorado.edu/homes/zorn/public_html/MallocDebug.html
Purify 使ってる人いたら評価を聞いてみたいんだけど。
0019デフォルトの名無しさん
NGNG#pragma warning(disable:4786 4788)
を使うべし
0020デフォルトの名無しさん
NGNGPurify使う事あるけど、物すごく遅い。
まぁでもリークは見えないものをめっけてくれる。
でもそれくらいかなぁ。
0021名無しさん
NGNGVisualStudioをインストールしていない
ターゲットマシン上で起動した
EXEのデバッグ文字列と
DLLの実行時リンクのトレースを表示する
ことができるツール。
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNGで十分
0025デフォルトの名無しさん
NGNGif(a==b) と書いたつもりが if(a=b) になっていたら
結構発見しにくいバグになってしまう。
大量に引っかかるけど気合でチェック。
0026名称未設定
NGNG0027デフォルトの名無しさん
NGNG前々から気になってる。
具体例キボンヌ。
00286>27
NGNGあわせて
void test_max(void)
{ // もちろん実際はもっと手を抜く
assert(2, max(2,1)); // 第一引数が大きい場合
assert(2, max(1,2)); // 第二引数が大きい場合
assert(2, max(2,2)); // 同値である場合
assert(2, max(-2,2)); // 負数を含む
assert(2, max(2,-2)); // 負数を含む
assert(2, max(-2,-2)); // 負数で同値
assert(INT_MAX, max(INT_MAX, INT_MIN)); // 境界をチェック
}
というチェック関数を書く。
そして、こまめにこのチェック関数を実行する。
# 実際はassertではなくUnitTest支援ツール・ライブラリを使う
高速化したらチェック。
コンパイラが変わったらチェック。
(maxが依存している)intcmpを変更したらチェック。
maxの仕様が変わったら(あるいはテストを書き換えて)チェック。
バグがあったら、そのバグを再現させるassertを追加してチェック。
なにもしなくても一日一回はチェック。
ひたすらチェック。
チェックに一つでも失敗したら、それを直してから先へ進む。
これをアプリ全体のモジュール・クラス(の全てのメソッド)に対して適用すると、
(チェックした範囲内で)100%正しく動くアプリが完成する。
100%正しく動いているアプリは拡張も変更も容易。-> リファクタリング等々
参照
http://objectclub.esm.co.jp/eXtremeProgramming/
0029デフォルトの名無しさん
NGNG003027
NGNG解説サンクス!
試してみるね。
そういえば、monazillaのところでも同じことやってたみたい。
>参照
おおお。テスティングフレームワークが一杯!
0031デフォルトの名無しさん
NGNG誰か簡単に教えて〜ん
0032デフォルトの名無しさん
NGNGgdb a.out core
(a.outはcore吐いたプログラム名)
詳しい説明は以下を読め
http://www.asahi-net.or.jp/%7Ewg5k-ickw/html/online/gdb-4.18/gdb_toc.html
003331
NGNGそれSolarisでも使える?
0034デフォルトの名無しさん
NGNGOSじゃなくて、開発環境に依存する。
gdbはGNUだけ。
0035Solaris
NGNG(あんまり詳しくないんで聞き返さないで)
0036デフォルトの名無しさん
NGNGだから警告レベルを上げろっての。
0037デフォルトの名無しさん
NGNG>23はやりすぎ。
assert撒かないのや存在そのものを知らない奴は論外。
0038デフォルトの名無しさん
NGNG拾ってくれないコンパイラーも有るかも。
もしかしたら。
VCの場合、最高に警告レベルあげたら、使っていない引数まで
律儀に表示した...
WinMainの引数なんて instanceくらいしかつかわんのに (..;
0039デフォルトの名無しさん
NGNGC++ 限定ですが、関数定義に引数の型だけ書くことで警告を抑制
できます。
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
// do something
}
0040デフォルトの名無しさん
NGNGそのへんの判別基準がまだよくわからない厨房ですが、参考になる
書籍とか Web とかありませんか?
Eiffel の事前条件とか事後条件とかのイメージで assert を入れる
のはどうなんでしょう?
0041デフォルトの名無しさん
NGNG使っていない引数を明示的に示すマクロは存在する。
UNREFERENCED_PARAMETER(param)
でも展開されると param = param なだけだけど。
0042デフォルトの名無しさん
NGNG契約による〜 だと、assert はドキュメンテーションの
感覚だからあながち 23 もやりすぎとは言えないかも知れない。
個人的には、不正な値を渡すと assert するまでもなく落ちるような場合
(null とか)は入れないなあ。見逃すとヤバい系(配列の添字とか)は
チェックしてます。
0043デフォルトの名無しさん
NGNG(void)param;
じゃだめだったっけ?
0044弱い者の味方、
NGNGホームページを作ったものの、まったくアクセスが上がらな
くて悩んでいる人のためにお役に立ちましょう。
効率よく宣伝できる共有宣伝掲示板を18個設置しました。
全部宣伝して回ればなんと1,000以上の掲示板にカキコしたこ
とになり即、効果が期待できます。さらに共有掲示板の隠し
リンクを発見してそれらも全部宣伝して回ると計2,000以上の
掲示板にカキコしたことになり、さらにアクセスアップを期
待できます。もう、今日からアクセスが無くて悩むことは無
いです。今すぐここからアタックアタック!!
http://home9.highway.ne.jp/cym10262/
0045デフォルトの名無しさん
NGNGおー なるほど、そんな手があったんですね ^^;
サンクス。
今度試してみます
0046デフォルトの名無しさん
NGNG効率悪いけど、コンパイルが速いDelphiだと充分実用範囲だったりするし。
0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNGどうすればいい?
やりたいのはデバイスモジュールのデバグだから
それ単体で試験できるならカーネル全体はいらないけど
0049デフォルトの名無しさん
NGNGprintf debugにコンパイルスピードが関係するの?
0050デフォルトの名無しさん
NGNG#define DEBUG_ASSERT(result, message)
#else
#define DEBUG_ASSERT(result, message) { if(!result) { put_log(message); exit_app(); } }
#endif
こんなのを複数個作って
エラーの種類によって入れたり外したりしてる・・
0051デフォルトの名無しさん
NGNG0052ななしぃ
NGNG0053ななしぃ
NGNG0054デフォルトの名無しさん
NGNGって対象カーネルは何者よ?
005548
NGNGふつうのLinuxです
自作のデバイスドライバでgdb上でステップ実行したいところとか
あるんで上手いやり方ないかなあ と。
0056デフォルトの名無しさん
NGNGユニットテストツールってどこにありますか?
0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNGhttp://kgdb.sourceforge.net でどう?
二台いるけど。
0059デフォルトの名無しさん
NGNG第1回は
printfをデバッグが終わったあとにはずすと自動変数の初期化の関係で潜在的バグが現れる
という(なんとも低レベルな)話だった。
0061デフォルトの名無しさん
NGNGうんこ投げてー
0062名無しさん
NGNGツールなんかいらなくなる。動作を見れば一瞬で分かるようになる。
デバッグじゃなくてバグチェックの話だとすると、
近代科学社の「ソフトウェア・テストの技法」
という本も参考になる。古いけど、チェック技法について
広く網羅している。
0063デフォルトの名無しさん
NGNG#ifdef DEBUGとか
assertとか
がいっぱい入ってると メンテ、するとき
読みづらくてこまる。
なんとかならないのかな
0064デフォルトの名無しさん
NGNGtraceとか
#ifdef DEBUGとか
assertとか
を削除するスクリプト作ってみてはいかが?
ソース閲覧用に。
0065デフォルトの名無しさん
NGNGバッファオーバーランとか、メモリリークとか、共有リソースロックし忘れ
とか、バグの理由はわかるようになっても、その発生個所はわからんだろ。
シングルスレッドアプリならまぁ、わからんでもないか。
0066デフォルトの名無しさん
NGNG残ってるの見るとちょっとどうかと。
0067デフォルトの名無しさん
NGNGだって取ると傷つきそうなんだもん。
■ このスレッドは過去ログ倉庫に格納されています