リバースデバッグがほとんど使用されないのはなぜですか?[閉まっている]


56

gdb は2009年にリバースデバッグのサポートを実装しました(gdb 7.0を使用)。2012年まで聞いたことはありません。特定の種類のデバッグの問題に非常に役立つことがわかりました。前に聞いたことを望みました。

私が間違っている場合、私を修正しますが、私の印象は、テクニックがまだほとんど使用されておらず、ほとんどの人がそれが存在することを知らないということです。どうして?

逆デバッグの使用が一般的なプログラミングコミュニティを知っていますか?

背景情報:


47
それが存在することを知らない人のために、逆デバッグとは何ですか?
メイソンウィーラー

5
MSは、システムのインテリトレースと呼んでいますが、これはreveseデバッグと呼んでいるものに似ていますが、環境によっては複数の名前の問題であり、あまり使用されていないように見えます。
リャサル

1
それが価値があるだけのために:それは本当にあなたが理解するよりもはるかに古いです-マイクロソフトはQuickCでそれをサポートしました(メモリが役立つ場合は1989年または90年頃)。
ジェリーコフィン

41
@MasonWheeler、明らかに逆デバッグは、コードにバグを追加する行為です。これは珍しい慣行であるというOPの前提に同意しません。
ベン・リー

3
@BenLee、私たちはその再バグと呼びます。
-OldFart

回答:


26

1つは、記録をオンにしてデバッグモードで実行すると、通常のデバッグモードと比較しても非常に高価です。また、より多くのメモリを消費します。

粒度を行レベルから関数呼び出しレベルに減らす方が簡単です。たとえば、Eclipseの標準デバッガーでは、「フレームにドロップ」できます。これは、本質的にすべてのパラメーターをリセットして関数の先頭に戻ることです(ヒープで行われた処理は元に戻さfinallyれず、ブロックは実行されません) 、したがって、それは真のリバースデバッガではありません;それに注意してください)。

これは数年前から利用可能であり、ホットコード置換と連携して動作することに注意してください。


1
非常に良い答えです。録音が高価であることを確認できます。アプリケーションの重要な部分を入力する直前に有効にする必要がありますが、これは必ずしも些細なことではありません。また、「フレームへのドロップ」で十分な場合も多いことに同意します。ただし、ループまたは再帰アルゴリズムではうまく機能しません。
フィリップクラッセン

2
それはrr(rr-project.org)までです。rrを使用して実行を記録する際の速度は、やや遅くなります。その後、お気に入りのIDEでリプレイ、ステップイン、巻き戻し、ウォッチャーを設定できます(github.com/mozilla/rr/wiki/Using-rr-in-an-IDE)...コードをデバッグする方法は決してありません同じ。
ジャベナード

11

既に述べたように、パフォーマンスは重要です。たとえば、gdbの可逆デバッグでは、gzipのようなものを実行すると、ネイティブで実行する場合に比べて50,000倍の速度低下が見られます。ただし、商用の代替手段があります。私はUndo undo.ioで働いており、UndoDB製品も同じように動作しますが、速度は2倍未満です。他の市販のリバーシブルデバッガも利用できます。


1
興味深いことに、私は間違いなく試してみます。いくつかの記事では、非営利的な使用は無料であると述べられていますが、それを確認する情報はホームページにありません。まだ本当ですか?所属を開示していただきありがとうございます。
フィリップクラッセン

2
UndoDBのスターターバージョンとプロフェッショナルバージョンの価格はいくらですか?UndoDBエディションのページには表示されません。
-tcrosley

3
Mozillaと比較してどうrrですか?
Ciro Santilli新疆改造中心法轮功六四事件

10

技術の選択と製品の概要については、1年前に書いた一連のブログ投稿(およびその後のフォローアップ)を参照してください。

あまり使用されない理由は、特別なハードウェアを使用したり、特別なデバッガーを使用したり、システムを適切にセットアップしたりすることです。残念ながら、ほとんどの人はデバッグツールから最大の価値を得るために時間を費やしていません。

また、gdbの「安価なデフォルト」はほとんど使用できないほど遅く、最も一般的なターゲットシステム以外のすべての安定性の問題がかなりあります。


4

TotalViewデバッガーのセールスエンジニアとしての私の経験から、人々はそれが存在することを知っていますが、(許容できるかどうかに関係なく)スローダウンに関係なく機能するとは考えていません。

ケンブリッジ大学は最近、「リバースデバッグコストの採用に失敗した場合、グローバル経済で年間410億ドル」という調査を行いました。

そして、GDBに戻って、私は(多くの)スローダウンにより、「実際の」アプリケーションではまったく使用できなくなると聞きました。

個人的には、「Hello world!」以外のアプリケーションでリバースデバッグを使用している人からの返事が欲しいです。


4
「Undo Software」スパムが調査に関するふりをするよりも、この調査をリンクする方がはるかに良いと思います。
ブルワーセーター

1
以前の仕事では、リバースデバッガー(ghs.com/products/timemachine.html)の構築に取り組みました。デバッガを内部で頻繁に使用しましたが、信じられないほど素晴らしかったです。もちろん、本当に毛むくじゃらのレースコンディションでは素晴らしかったですが、それ以上のものでした。リバースデバッグが常にオンになっていると、デバッグに関する考え方が変わります。反復回数が減り、コードのテスト方法にあまり注意を払わなくなります。実行の実行を保存して誰かに送信することもできるため、他の人のコードのバグを見つけるのに最適です。
スピードプレーン

2

この「リバース」または「ヒストリカル」デバッグをさらに拡張することが重要だと思います。複雑なシステムとそれらの動作を理解し、状態を明示する「イベント」を再生することが絶対に重要だと思います。

私が言いたいのは、なぜこのテクニックが今日あまり適用されていないのか、関連する問題がめったに議論されないのか、あなただけが疑問に思っているということです。

ここで、2つの非常に重要な概念を強調しましょう。

1.プログラミングシステムを理解するには、状態を明示的にすると便利です。

2.状態(イベント)のシーケンスを再生するプログラミングシステムをさらに理解するには、非常に役立ちます。

問題に取り組み、問題の解決策を提案または設計したいくつかのソースを以下に示します(複雑なシステムの状態を扱う)。

-tarビットのうち、紙:http ://shaffner.us/cs/papers/tarpit.pdf 主なアイデア:状態を回避、分離、または明示する

-CQRS http://www.cqrs.nu/ これは、コマンドクエリ分離とイベントソーシングという2つの概念の組み合わせです。さまざまな実装(Java、C#、Scala)が存在します。Tateシーケンスの再生とドメインモデルの進化は、ここで重要な部分です。

あなたがいる場合、実際にズームアウトして、関数型プログラミングの人々の「上昇」と(意識的に(UN))すでにあることをすでに見ることができる非常に広範な絵を見ることが状態が明示的になるため、FPに魅了!しかし、それはポイント1のみを扱います。2番目のものに対処するには、関数型リアクティブプログラミングと「大まかに」説明できる別の概念が必要です。

だから、あなたはすべてをうまく言っているかもしれませんが、実際にCQRSとFRPを使用しているのは誰ですか?私は言う(具体的な数字がないのでIMO)実際、多くの企業は、彼らが行う仕事がこの用語を持っていることを知らないというだけです。たぶんあなたは少しグーグルで、CQRSを使用している企業から聞いたことがありますが、すでにいくつかの成功事例があります。Netflixの例として、FRPもゆっくりと上昇しています。http//techblog.netflix.com/2013/02/rxjava-netflix-api.html 実際に.NETベースのRXの実装をリリースしました(ただし、 Javascriptの実装も)。そのため、人々は複雑なシステムを理解し、それらをさらに良くするために、今日これらの技術をすでに大規模に使用しています。そのため、リバースデバッグ手法を使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.