トップページ⇒tech
403コメント100KB

デバッグ技術を話しましょう

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
デバッグはとても重要なのにスレが内容なので作りました。
0175デフォルトの名無しさんNGNG
>>174
無用なバグを産みそうだなぁ
構文解析きちんとしないと危なくてイヤン
0176デフォルトの名無しさんNGNG
俺的にはC/C++で
#ifdef debug
  hogehoge;
#endif
を知った時とても衝撃的だった
0177デフォルトの名無しさんNGNG
デバッグが便利だからVBは他のどの言語よりも使いやすいとか
逝ってるテストケースも知らないVB厨も馬鹿だな。
0178デフォルトの名無しさんNGNG
DでDebug

debug(hoge) {
  hogehoge;
  ...
} else {
  hugehuge;
  ...
}
0179デフォルトの名無しさんNGNG
バグがあるようなプログラムなんか書くなよ
0180デフォルトの名無しさんNGNG
だからデバッグすんだろ
0181デフォルトの名無しさんNGNG
>>174
そこまでやるなら、なんかツール作った方がいいと思うけど。
0182デフォルトの名無しさんNGNG
あげとこ。

なぜか出てないけどassertは滅茶苦茶重要だと思う。
処理の前に前提条件が満たされているかどうかassert
処理の後に結果が正しいかどうかassert
ちょっと動かせばバグはすぐに見つかる。
0183デフォルトの名無しさんNGNG
引数が 0 のとき発動するんだよな。これでたまに混乱する。
0184デフォルトの名無しさんNGNG
>>182
printf 系コマンドで
「間違ってるよ」
メッセージを表示するよりは、さっさと assert でチェックしる!ということですか?
0185デフォルトの名無しさんNGNG
>>182
製品出した後にassertで転ぶとこを想像するとガクブルでとても使えない。
0186デフォルトの名無しさんNGNG
>>185
製品にassertのこしとくの?プリプロセッサなりなんなりで外したり
できんのかな?
まあ、ユーザー環境でassert引っかかるようなら、そもそも品質問題
だろうけど。
0187デフォルトの名無しさんNGNG
製品で動くassertがあるのかと小一時間
0188デフォルトの名無しさんNGNG
標準では NDEBUG マクロの定義で assert を無効化できるそう。
0189デフォルトの名無しさんNGNG
>>186-187
なんかの手違いでデバッグ版のobjやらdllやらが混じっちゃうかもよ。
品質問題っちゃそれまでだけど。
0190デフォルトの名無しさんNGNG
>>189
んな奴まで知るかボケェ、DEBUG以前の問題じゃ。
0191デフォルトの名無しさんNGNG
いつもテスト直前になってログ出力を埋め込むんだけど、何とか assert と一体化できんかしら。
0192デフォルトの名無しさんNGNG
>>191
assert を自作する。
トッパンから出ているP.J.プラウガーの標準Cライブラリって本が参考になる。
0193デフォルトの名無しさんNGNG
>>183
> 引数が 0 のとき発動するんだよな。

なんて考えてるから、混乱するんだよ。

「式を評価し、結果が false の場合はデバッグ レポートを生成します。」と考えれば何の問題もないと思う。
(まあ、MS のヘルプも悪いけどな。)
0194デフォルトの名無しさんNGNG
結局、assertもprintfも本質的なところでは同じデバッグ手法だからな
0195デフォルトの名無しさんNGNG
>>194
そうか ?
printf は変数 watch で、assert は条件付ブレークみたいなもんだと思うが。
0196191NGNG
>>192
サンクスコ。見ておく。
0197デフォルトの名無しさんNGNG
>>195
(゚∀゚)まあそうなんだけど、結局どっちも
「この変数(条件)がおかしかったらバグだよな」
とアタリをつけながらデバッグする手法だし
0198デフォルトの名無しさんNGNG
>>197
そこまで言うと、普通のデバッグ技法はすべてそれになっちゃうわけだが。
0199182NGNG
>>197
「この変数(条件)がおかしかったらバグだよな」
ってのはそうだけど、ニュアンスが違う。

後からアタリを付けるのではなく、あらかじめそこらじゅうに
assertをばらまいておく。短い関数だとassert行の方が多いくらい。
当然、デバッグを始めてから入れるのでは遅い。
コードを組むときに手当たり次第に入れておく。

敵を探してねらい打ちするのではなく、あらかじめ地雷を
そこらじゅうに埋めておく感じかな?
0200デフォルトの名無しさんNGNG
よくデバッグの開始→プロセスへのアタッチで作業をしていますが、
デタッチができるデバッグツールは存在しますか?
0201デフォルトの名無しさんNGNG
>>200
あるよ。
0202デフォルトの名無しさんNGNG
デバッガのバイトってないの?
あるなら、いくらくらいもらえるのかな
0203デフォルトの名無しさんNGNG
>>202
バグを探すだけの人はデバッガではない。
0204デフォルトの名無しさんNGNG
>203
そんな話はしてないだろ。
0205デフォルトの名無しさんNGNG
>>204
どんな話なの?
0206デフォルトの名無しさんNGNG
>>203はデバッグはバグを探すだけだと思ってるって話。
0207デフォルトの名無しさんNGNG
>>206
私の職場ではGDB(The GNU Source-Level Debugger)を毎日のように起動しているのにバグが修正されません。
誇大広告で訴えるべきでしょうか?
0208デフォルトの名無しさんNGNG
>>207
マジレスすると、バグを修正するにはgccも必要。
パッチ作るだけならgdbだけでもなんとかなるが
0209デフォルトの名無しさんNGNG
デバッガーの使い方はどうやって身に付ければいいのですか?
適当な開設サイトや開設書籍が見当たらない、、、
0210デフォルトの名無しさんNGNG
>209
確か本もあったと思うけど忘れた。
断片的な情報を自分で集めることは必要だろうね。
このサイトなんていいこと書いてる。
ttp://www1.kcn.ne.jp/~robe/index.html
0211山崎渉NGNG
(^^)
0212山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0213デフォルトの名無しさんNGNG
printfから脱却したい
0214デフォルトの名無しさんNGNG
>>213
fprintf に昇格だ
0215デフォルトの名無しさんNGNG
this.debug.setLevel(Debugger.Level.ALL);
0216デフォルトの名無しさんNGNG
http://yahooo.s2.x-beat.com/html/yahooobbs.html
0217名無しさん@EmacsNGNG
ある瞬間のレジスタの値の保存や、
スタックトレース等を行いたいです。
OSはlinuxとWindows2000です。
それぞれの方法を教えてください。
言語はC++でお願いします。
0218デフォルトの名無しさんNGNG
>>217
ICE
0219名無しさん@EmacsNGNG
>>218

OSの権限がないとそういうことできないんすかね?
アプリが落ちたときに、例えばcygwinやwin9xとかだとレジスタやスタックの値が出るじゃないですか。
あれをやりたかったんですが。
スタックトレースぐらいできないですかね?
0220デフォルトの名無しさんNGNG
>>217
> 言語はC++でお願いします。

C++ だけじゃ無理。
インラインアセンブラ使え。
あとスタックトレースは常にできるとは限らないぞ。
0221デフォルトの名無しさんNGNG
>>219
毎秒ごとにファイルに書き出せば、
落ちても、大丈夫。
Windowsアプリなら、楽に実装できますが。
0222デフォルトの名無しさんNGNG
設計を端折ってプログラミングする奴ってたいていデバッグで詰まるよな
0223221NGNG
>>222
僕は設計しないで書く。
いつも、デバッグしまくり。
たまに上手くいくとうれしい。
そんな人は、グローバル変数がやけに多い人です。
あなたはどうです?
0224デフォルトの名無しさんNGNG
バグトラッキング向けのツールって使ってる?
バグデータベースの共有って標準的なスタイルがあるのかな?
0225デフォルトの名無しさんNGNG
>>219
WindowsにはSEHと呼ばれる構造化例外処理機構があり、
アクセスバイオレーション、0除算、ブレークポイントなどの例外を
トラップすることができます。
SEHの機能を使って例外ハンドラを登録しておけば、
例外が発生したとき、レジスタの内容が保存されるので、
例外ハンドラの中から、それを参照するということができたはずです。

MSDNにはどこにレジスタの内容が保存されているかは書かれていなかったと思います。
海外のサイトでSEHを解析しているところがあったと思うので、
それを探してみてください。

C++(Visual C++)では例外処理にSEHを使っていたはずなので、
競合しないように注意が必要かと思います。
0226山崎渉NGNG
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
0227山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0228デフォルトの名無しさんNGNG
目立たないスレNo.1です。
0229デフォルトの名無しさんNGNG
量子スレ、あげ
0230デフォルトの名無しさんNGNG
かってにあげないで。そして、またsage。
0231デフォルトの名無しさんNGNG
>>230
あげていいですか?
0232デフォルトの名無しさんNGNG
いやーん。あげないで。
0233デフォルトの名無しさんNGNG
6億円もらったら似非2ちゃんねる作ってもいいよ
0234山崎 渉NGNG
(^^)
0235デフォルトの名無しさんNGNG
俺も最近デバッグについて興味があります。
今まで、
(少しコード書いて→実行→デバッグ)の繰り返しでしたが

最近じゃバグがあんまりでないので、
一気にコード書いて
一気にデバッグやりたいものです。

上の細かいステップじゃ、無駄な実行時間と確認時間が多いのです。

基本的なfprintf(fpやstderr),ASSERT等、
windowsは、上でVCやBCB標準のデバッガを使ってますが
他に何かあればと、

書籍探したのですが
http://www.amazon.co.jp/exec/obidos/ASIN/4756103642/249-4948129-8749118
http://www.amazon.co.jp/exec/obidos/ASIN/4774111252/ref=pd_sim_dp_4/249-4948129-8749118
http://www.amazon.co.jp/exec/obidos/ASIN/4756117457/ref=pd_bxgy_text_1/249-4948129-8749118
http://www.amazon.co.jp/exec/obidos/ASIN/4756102107/ref=pd_bxgy_text_2/249-4948129-8749118
http://www.amazon.co.jp/exec/obidos/ASIN/4756117163/qid=1060413922/sr=1-16/ref=sr_1_0_16/249-4948129-8749118
http://www.amazon.co.jp/exec/obidos/ASIN/4274064166/qid=1060413904/sr=1-1/ref=sr_1_2_1/249-4948129-8749118
http://www.amazon.co.jp/exec/obidos/ASIN/4891001860/ref=pd_sim_dp_5/249-4948129-8749118
やっぱり、あんまりないようです。

とりあえず、
上の2つが気になるので買ってみます。
0236デフォルトの名無しさんNGNG
消えてなくなりそうなので エイジ
0237勢いないので、書籍のリンクでネタ振りしてみたのNGNG
文章にバグがある。
もうだめぽ。

>windowsは、上でVCやBCB標準のデバッガを使ってますが
windows上では、VCやBCB標準のデバッガを使ってますが

修正しますた。

0238デフォルトの名無しさんNGNG
ヤフオクで「デバッグ」で探してみた。


2件しかない(デバッグ関係ない)上に
http://page2.auctions.yahoo.co.jp/jp/auction/b39899423
_| ̄|○ こんなのが3万かよ
0239なんとかUnitNGNG
>>235
最近はあえて細かく
少しテストケース作って、コード書くorリファクタリングして、テストして
ってやり方が主流Sa
0240山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0241デフォルトの名無しさんNGNG
プログラマンダー初心者なんですが
デバッガーってどういう風につくってるんですか
オブジェクトコードをオペコード単位でexecみたいなので読み込むとか?
GDBのソース嫁とかなしねv(^_^)v 
0242デフォルトの名無しさんNGNG
>>241
どうやって作ってるって…
エディターでソース書いて、コンパイラーでコンパイルして、リンカーでリンクする。

↓ここらへんでも読んでみんさい
http://www.ascii.co.jp/books/detail/4-7561/4-7561-1745-7.html
0243デフォルトの名無しさんNGNG
>>242
バカジャネーノ
デバッカーの仕組みを聞いてんだよ
誰もコンパイリングの仕方なんかキイテネーヨ
わからんならでシャバン名や
0244241NGNG
わかった!
たぶん

1,オブジェクトコードを読み込む
2,disアセンブルする
3,ブレークさせたいところにint 3 みたいなのをいれる
4,実行(int 3でとまる)
5,セグメントの変数を見るウマー

ですかね?
0245デフォルトの名無しさんNGNG
>>241
チミの質問が余りに要領を得ないからからかっただけよん。
リンクは本物なんで、その本買って読め。

ちなみにint3使うなんてDOS時代のカビの生えた方法。
0246デフォルトの名無しさんNGNG
>>245
作者?
やけに宣伝するね
前に立ち読みしたけど内容薄いよ
0247デフォルトの名無しさんNGNG
Jonathan B.Rosenbergは日本語が堪能で2chに書き込んでいることが発覚しました。
0248Jonathan B.Rosenberg(偽)NGNG
>>246
なら、お前が>>241の電波な質問に答えてやれ。
0249デフォルトの名無しさんNGNG
ディスアセンブルするんじゃなくて、「特殊なコンパイルをする」
んじゃないのけ?JavaもVC++もそうヤッテルよね?
0250デフォルトの名無しさんNGNG
恋愛話を話しましょう
0251Jonathan B.Rosenberg(偽) NGNG
>>249
全然違う。そのくらいは書いてあるから、私の本を読みなさい。(笑
0252デフォルトの名無しさんNGNG
>>245
>>ちなみにint3使うなんてDOS時代のカビの生えた方法。

じゃあどうやるんですか!!!!!!!!
おねがい教えて!!
じゃないとボク逝っちゃうううううううううううううううううううううううう
ああああああああおまんこでるうううううううううううううう

call___main
movl$LC0, (%esp)
call_printf
int$3#←
movl$LC1, (%esp)

ってやったらexception 〜で終了させられました
0253Jonathan B.Rosenberg(偽) NGNG
>>252
本代をけちる奴には教えない(笑)
0254Jonathan B.Rosenberg(偽) NGNG
>>252
>>243の非礼な態度を詫びるならヒントぐらいはやろう。
0255デフォルトの名無しさんNGNG
>>254
IA32のマニュアル下巻にかいてあったのでもういいです氏ね
アクロバットリーダー バージョン 6.0.糞おめぇ

その本「はじめてよむ486」より1000円たかいやん
イッテヨシ

0256Jonathan B.Rosenberg(偽) の本物NGNG
>>255
吐いた唾飲み込むなよ。その方法は使えない。
0257デフォルトの名無しさんNGNG
俺は、オブジェクトファイルの中のデバッグ情報を取得したいのだが、
どうしたらいいんだ?
なんか、そういうライブラリがあったような気がするけど、
使い方がわからなかったんだよなぁ・・・。

誰か、教えて。
0258デフォルトの名無しさんNGNG
>>257
コンパイルするときアセンブラを出力すればいい
0259デフォルトの名無しさんNGNG
>>258
http://download.microsoft.com/download/0/6/7/0678184e-905e-4783-9511-d4dca1f492b4/Feb99BugSlayer.exe
を解凍してその中のfigure1.bmpみたいなASSERT作りたいです。
0260デフォルトの名無しさんNGNG
>>245
窓はint3でも通ったような気がする。

ちゅーかリリースバイナリに埋め込んどくのやめてくれ。
デバッガで追っかけてると、いきなり止まるんでうざい。
0261デフォルトの名無しさんNGNG
perlのデバッガ作りたいんですが
ようわかりません
たんにevalしてるだけじゃないんですか標準でついてくるデバッガは


自分で書いたのはこんなかんじ
while(<>){
eval $_;
print $_;#標準出力にevalしたコードをprintする
}
0262デフォルトの名無しさんNGNG
>>261
man perldebguts
0263デフォルトの名無しさんNGNG
ハードウェアエミュレータとOSエミュレータを作ればデバッガもすぐできるだろう。


デバッグ入門〜みたいな本とかないかな。オレ自身はデバッガでプログラム覚えたような
もんで、もう10年以上お世話になっているわけだけれども、最近の新人君なんかはなか
なか覚える機会がないようで。サンプル使ってVCでなんか作る分にはデバッグ機能なし
でもなんとかなっちゃうからねぇ。

プログラムを覚える上でもすげー便利だと思うんだけど、あんまりデバッグ関連の書籍が
ないのはやっぱ出来る人でもデバッガ使わないとかいう人が多いからだろうか。
0264デフォルトの名無しさんNGNG
昔。バッチでプロトタイピングしていたとき、Xscriptで
トレースデバッグしていた。今やるならIDEで追いかける、
条件コンパイル向けにデバッグコード書いてVT端末orファイル
出力でやるんだろうけど。あ、lint使うのもアリだな…構文検査だけだけど。

つか…アセンブラレベルのデバッガ。ソースコードなんざsimtel.netやら
freedos.orgに転がっているのだが…。
0265デフォルトの名無しさんNGNG
つか、
lintぐらいは、ざーっとチェックした後、あやしい箇所には
こうじゃないですか? という候補を提示して対話的にささっと
修正できると便利じゃないかと思うんだが。
……俺が知らないだけでありそうな気はする。
0266デフォルトの名無しさんNGNG
gccで-Wall
0267デフォルトの名無しさんNGNG
壁って何よ?
0268デフォルトの名無しさんNGNG
>>267
おとなりに塀が出来たんだってね


 ウォーーーーール!
0269デフォルトの名無しさんNGNG
魚屋さんが驚いた


  うぉっ!
0270デフォルトの名無しさんNGNG
>>268
柔道着ブルマのスレ作ったのはあんたか?
0271268NGNG
>>270
解説キボンヌ

帯ギュは未読
読んだ方がよろしいの?
0272デフォルトの名無しさんNGNG
桜子のエロ同人誌って無いの?
0273268NGNG
>>271
違いましたか。失敬。
帯ギュのコミックの投稿欄にそういうギャグが出てたんで。
0274デフォルトの名無しさんNGNG
モンキーターンでも見れ
■ このスレッドは過去ログ倉庫に格納されています