デバッグ技術を話しましょう
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNGddd(gdb)を使っているのですが、ソースが途中までしか表示されません。
この症状に何か心当たりありませんか?
よろしくお願いします。
0160デフォルトの名無しさん
NGNGテストファーストはバグを見つけるものであってバグを退治するものじゃない。
0161159
NGNGソースコード自体は5000行ほどしかないのですが。
なぜか途中までしか、読み込んでくれません。
そういうもんですか?
そんなわきゃないか。
0162デフォルトの名無しさん
NGNGいや、質問はageてくれ、
> ソースが途中までしか表示されません。
通常設定だとgdbはブレイクポイントの上下5行程度しか表示しない
set listsize 20
とすれば上下10行(つまり全部で20行)表示するようになる。
それかバイナリとソースが不一致だと変な動作をすることがある。
0163159
NGNG> 通常設定だとgdbはブレイクポイントの上下5行程度しか表示しない
まだブレイクを設定前の段階なんです。
dddを起動して出てくるソースの表示が途中まで(900行ぐらい)しかでてこないと。
set listsizeもこれからやってみます。
0164159
NGNGどなたか情報お持ちではないですか?
0165デフォルトの名無しさん
NGNGhttp://www.hashimotoya.jp/butsugu/juzu/kokutan.html
つけてると感情的なしこり、煩悩がはれて、涅槃の境地
でデバックする事ができる。
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNG実はデバッグ能力がかなり鍛えられるよね
やみくもに挟んでもしょうがないから
バグのありそうなところにprintfを入れる
眼力がつくというか
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGコメントアウトの2分探索はよくやるが
たまにどっち側をコメントアウトしても変な動作するときがあるな。
0172デフォルトの名無しさん
NGNGコメント化すること?
コメント化したのを元に戻すこと?
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG#define StartS(l) int _s_ = 0, _l_ = l
#define S if( _s_++ < _l_ )
void foo() {
StartS(2);
S var();
S hoge();
S if( ... ) {;
S hoe();
S }
0175デフォルトの名無しさん
NGNG無用なバグを産みそうだなぁ
構文解析きちんとしないと危なくてイヤン
0176デフォルトの名無しさん
NGNG#ifdef debug
hogehoge;
#endif
を知った時とても衝撃的だった
0177デフォルトの名無しさん
NGNG逝ってるテストケースも知らないVB厨も馬鹿だな。
0178デフォルトの名無しさん
NGNGdebug(hoge) {
hogehoge;
...
} else {
hugehuge;
...
}
0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNGそこまでやるなら、なんかツール作った方がいいと思うけど。
0182デフォルトの名無しさん
NGNGなぜか出てないけどassertは滅茶苦茶重要だと思う。
処理の前に前提条件が満たされているかどうかassert
処理の後に結果が正しいかどうかassert
ちょっと動かせばバグはすぐに見つかる。
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNGprintf 系コマンドで
「間違ってるよ」
メッセージを表示するよりは、さっさと assert でチェックしる!ということですか?
0185デフォルトの名無しさん
NGNG製品出した後にassertで転ぶとこを想像するとガクブルでとても使えない。
0186デフォルトの名無しさん
NGNG製品にassertのこしとくの?プリプロセッサなりなんなりで外したり
できんのかな?
まあ、ユーザー環境でassert引っかかるようなら、そもそも品質問題
だろうけど。
0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNGなんかの手違いでデバッグ版のobjやらdllやらが混じっちゃうかもよ。
品質問題っちゃそれまでだけど。
0190デフォルトの名無しさん
NGNGんな奴まで知るかボケェ、DEBUG以前の問題じゃ。
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNGassert を自作する。
トッパンから出ているP.J.プラウガーの標準Cライブラリって本が参考になる。
0193デフォルトの名無しさん
NGNG> 引数が 0 のとき発動するんだよな。
なんて考えてるから、混乱するんだよ。
「式を評価し、結果が false の場合はデバッグ レポートを生成します。」と考えれば何の問題もないと思う。
(まあ、MS のヘルプも悪いけどな。)
0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNGそうか ?
printf は変数 watch で、assert は条件付ブレークみたいなもんだと思うが。
0197デフォルトの名無しさん
NGNG(゚∀゚)まあそうなんだけど、結局どっちも
「この変数(条件)がおかしかったらバグだよな」
とアタリをつけながらデバッグする手法だし
0198デフォルトの名無しさん
NGNGそこまで言うと、普通のデバッグ技法はすべてそれになっちゃうわけだが。
0199182
NGNG「この変数(条件)がおかしかったらバグだよな」
ってのはそうだけど、ニュアンスが違う。
後からアタリを付けるのではなく、あらかじめそこらじゅうに
assertをばらまいておく。短い関数だとassert行の方が多いくらい。
当然、デバッグを始めてから入れるのでは遅い。
コードを組むときに手当たり次第に入れておく。
敵を探してねらい打ちするのではなく、あらかじめ地雷を
そこらじゅうに埋めておく感じかな?
0200デフォルトの名無しさん
NGNGデタッチができるデバッグツールは存在しますか?
0201デフォルトの名無しさん
NGNGあるよ。
0202デフォルトの名無しさん
NGNGあるなら、いくらくらいもらえるのかな
0203デフォルトの名無しさん
NGNGバグを探すだけの人はデバッガではない。
0204デフォルトの名無しさん
NGNGそんな話はしてないだろ。
0205デフォルトの名無しさん
NGNGどんな話なの?
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNG私の職場ではGDB(The GNU Source-Level Debugger)を毎日のように起動しているのにバグが修正されません。
誇大広告で訴えるべきでしょうか?
0208デフォルトの名無しさん
NGNGマジレスすると、バグを修正するにはgccも必要。
パッチ作るだけならgdbだけでもなんとかなるが
0209デフォルトの名無しさん
NGNG適当な開設サイトや開設書籍が見当たらない、、、
0210デフォルトの名無しさん
NGNG確か本もあったと思うけど忘れた。
断片的な情報を自分で集めることは必要だろうね。
このサイトなんていいこと書いてる。
ttp://www1.kcn.ne.jp/~robe/index.html
0211山崎渉
NGNG0212山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNGfprintf に昇格だ
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNG0217名無しさん@Emacs
NGNGスタックトレース等を行いたいです。
OSはlinuxとWindows2000です。
それぞれの方法を教えてください。
言語はC++でお願いします。
0218デフォルトの名無しさん
NGNGICE
0219名無しさん@Emacs
NGNGOSの権限がないとそういうことできないんすかね?
アプリが落ちたときに、例えばcygwinやwin9xとかだとレジスタやスタックの値が出るじゃないですか。
あれをやりたかったんですが。
スタックトレースぐらいできないですかね?
0220デフォルトの名無しさん
NGNG> 言語はC++でお願いします。
C++ だけじゃ無理。
インラインアセンブラ使え。
あとスタックトレースは常にできるとは限らないぞ。
0221デフォルトの名無しさん
NGNG毎秒ごとにファイルに書き出せば、
落ちても、大丈夫。
Windowsアプリなら、楽に実装できますが。
0222デフォルトの名無しさん
NGNG0223221
NGNG僕は設計しないで書く。
いつも、デバッグしまくり。
たまに上手くいくとうれしい。
そんな人は、グローバル変数がやけに多い人です。
あなたはどうです?
0224デフォルトの名無しさん
NGNGバグデータベースの共有って標準的なスタイルがあるのかな?
0225デフォルトの名無しさん
NGNGWindowsにはSEHと呼ばれる構造化例外処理機構があり、
アクセスバイオレーション、0除算、ブレークポイントなどの例外を
トラップすることができます。
SEHの機能を使って例外ハンドラを登録しておけば、
例外が発生したとき、レジスタの内容が保存されるので、
例外ハンドラの中から、それを参照するということができたはずです。
MSDNにはどこにレジスタの内容が保存されているかは書かれていなかったと思います。
海外のサイトでSEHを解析しているところがあったと思うので、
それを探してみてください。
C++(Visual C++)では例外処理にSEHを使っていたはずなので、
競合しないように注意が必要かと思います。
0226山崎渉
NGNG0227山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNGあげていいですか?
0232デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNG0234山崎 渉
NGNG0235デフォルトの名無しさん
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デフォルトの名無しさん
NGNG0237勢いないので、書籍のリンクでネタ振りしてみたの
NGNGもうだめぽ。
>windowsは、上でVCやBCB標準のデバッガを使ってますが
windows上では、VCやBCB標準のデバッガを使ってますが
修正しますた。
0238デフォルトの名無しさん
NGNG2件しかない(デバッグ関係ない)上に
http://page2.auctions.yahoo.co.jp/jp/auction/b39899423
_| ̄|○ こんなのが3万かよ
0240山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0241デフォルトの名無しさん
NGNGデバッガーってどういう風につくってるんですか
オブジェクトコードをオペコード単位でexecみたいなので読み込むとか?
GDBのソース嫁とかなしねv(^_^)v
0242デフォルトの名無しさん
NGNGどうやって作ってるって…
エディターでソース書いて、コンパイラーでコンパイルして、リンカーでリンクする。
↓ここらへんでも読んでみんさい
http://www.ascii.co.jp/books/detail/4-7561/4-7561-1745-7.html
0243デフォルトの名無しさん
NGNGバカジャネーノ
デバッカーの仕組みを聞いてんだよ
誰もコンパイリングの仕方なんかキイテネーヨ
わからんならでシャバン名や
0244241
NGNGたぶん
1,オブジェクトコードを読み込む
2,disアセンブルする
3,ブレークさせたいところにint 3 みたいなのをいれる
4,実行(int 3でとまる)
5,セグメントの変数を見るウマー
ですかね?
0245デフォルトの名無しさん
NGNGチミの質問が余りに要領を得ないからからかっただけよん。
リンクは本物なんで、その本買って読め。
ちなみにint3使うなんてDOS時代のカビの生えた方法。
0246デフォルトの名無しさん
NGNG作者?
やけに宣伝するね
前に立ち読みしたけど内容薄いよ
0247デフォルトの名無しさん
NGNG0248Jonathan B.Rosenberg(偽)
NGNGなら、お前が>>241の電波な質問に答えてやれ。
0249デフォルトの名無しさん
NGNGんじゃないのけ?JavaもVC++もそうヤッテルよね?
0250デフォルトの名無しさん
NGNG0251Jonathan B.Rosenberg(偽)
NGNG全然違う。そのくらいは書いてあるから、私の本を読みなさい。(笑
0252デフォルトの名無しさん
NGNG>>ちなみにint3使うなんてDOS時代のカビの生えた方法。
じゃあどうやるんですか!!!!!!!!
おねがい教えて!!
じゃないとボク逝っちゃうううううううううううううううううううううううう
ああああああああおまんこでるうううううううううううううう
call___main
movl$LC0, (%esp)
call_printf
int$3#←
movl$LC1, (%esp)
ってやったらexception 〜で終了させられました
0253Jonathan B.Rosenberg(偽)
NGNG本代をけちる奴には教えない(笑)
0254Jonathan B.Rosenberg(偽)
NGNG>>243の非礼な態度を詫びるならヒントぐらいはやろう。
0255デフォルトの名無しさん
NGNGIA32のマニュアル下巻にかいてあったのでもういいです氏ね
アクロバットリーダー バージョン 6.0.糞おめぇ
その本「はじめてよむ486」より1000円たかいやん
イッテヨシ
0256Jonathan B.Rosenberg(偽) の本物
NGNG吐いた唾飲み込むなよ。その方法は使えない。
0257デフォルトの名無しさん
NGNGどうしたらいいんだ?
なんか、そういうライブラリがあったような気がするけど、
使い方がわからなかったんだよなぁ・・・。
誰か、教えて。
0258デフォルトの名無しさん
NGNGコンパイルするときアセンブラを出力すればいい
■ このスレッドは過去ログ倉庫に格納されています