40

There are many ways of doing debugging, using a debugger is one, but the simple one for the humble, lazy, programmer is to just add a bunch of print statements to your code.

i.e.

 def foo(x):
     print 'Hey wow, we got to foo!', x

     ...

     print 'foo is returning:', bar
     return bar

Is there a proper name for this style of debugging?

4

19 に答える 19

72

Yes - it's known as printf() debugging, named after the ubiquitous C function:

Used to describe debugging work done by inserting commands that output more or less carefully chosen status information at key points in the program flow, observing that information and deducing what's wrong based on that information.

-- printf() debugging@everything2

Native users of other languages no doubt refer to it by the default print / log / or trace command available for their coding platform of choice, but i've heard the "printf()" name used to refere to this technique in many languages other than C. Perhaps this is due to its history: while BASIC and FORTRAN had basic but serviceable PRINT commands, C generally required a bit more work to format various data types: printf() was (and often still is) by far the most convenient means to this end, providing many built-in formatting options. Its cousin, fprintf(), takes another parameter, the stream to write to: this allowed a careful "debugger" to direct diagnostic information to stderr (possibly itself redirected to a log file) while leaving the output of the program uncorrupted.

Although often looked down on by users of modern debugging software, printf() debugging continues to prove itself indispensable: the wildly popular FireBug tool for the Firefox web browser (and similar tools now available for other browsers) is built around a console window into which web page scripts can log errors or diagnostic messages containing formatted data.

于 2008-10-09T23:21:55.420 に答える
43

穴居人のデバッグと呼ばれると聞きました

于 2008-10-09T23:58:09.887 に答える
38

次の引用が適切だと思いました。

「最も効果的なデバッグ ツールは、今でも慎重に考え、慎重に配置された print ステートメントと組み合わせることです。」

— Brian Kernighan 著、「Unix for Beginners」(1979 年)

于 2008-10-26T21:47:37.627 に答える
22

私はそれをトレーシングと呼んでいます。

于 2008-10-09T23:31:33.873 に答える
7

あなたのズボンのデバッグの席:)

組み込みシステムを使用している場合、最前線にあり、コーディングしている言語にまだデバッガーがない場合、デバッガーの動作がおかしくて、正常性を回復したい場合。マルチスレッドコードで再入可能性がどのように機能するかを理解するには....

于 2008-10-10T05:07:49.030 に答える
7

私とチームメイトはそれを「昔ながらのデバッグ」と呼んでいます。

于 2008-10-09T23:25:38.330 に答える
6

私はこれを「Hi, Mom」プログラミングと呼んでいます。

于 2008-10-10T04:35:52.057 に答える
5

また、VBの群衆から、この「デバッグ」の「スタイル」を指す「MessageBoxデバッグ」という用語を聞いたことがあります。

于 2008-10-09T23:42:33.913 に答える
5

探索的プログラミングと同じ意味で、探索的デバッグと呼ぶのが好きです。これは、デバッガーがプログラム内の複雑な型を調べたり、ヘルパー関数を個別に呼び出したりするほど強力ではない場合、または上記の機能を直接使用するためのバグについて十分に知らない場合に発生します。

于 2008-10-09T23:46:28.663 に答える
4

多くの場合、コードをインストルメント化する唯一の方法であるシステムを組み込みました。残念ながら、印刷には時間がかかり、システムのリアルタイム フローに影響を与えます。そのため、システムの状態に関する情報 (関数エントリの終了など) が内部バッファに書き込まれ、後でダンプおよび解析される「トレース」を介して計測も行います。実際の組み込みプログラマーは、LED を点滅させることでデバッグできます ;)

于 2008-10-10T00:07:06.813 に答える
2

私は通常それをトレースと呼びます。

Visual Studioでは、トレースを追加するだけのブレークポイントを設定できることに注意してください。ブレークポイントを右クリックし、[ヒットしたとき...]を選択して、[メッセージの印刷]オプションをオンにします。

于 2008-10-09T23:51:31.697 に答える
2

また、.Netでは、デバッグステートメント(実際にはDebug.WriteLineだと思います)を追加してコンソールに出力できます。これらのステートメントはデバッグビルドにのみ含まれています。リリースビルドを実行すると、コンパイラは自動的にそれらを除外します。

于 2008-10-10T00:04:44.367 に答える
2

古典的なデバッグ

于 2008-10-10T00:31:40.133 に答える
2

(優れたロギングは、稼働中の本番システムで問題をデバッグする場合に非常に役立ちます。多くの役に立たない冗長な print ステートメントはそうではありませんが、何か重要または予期しないことが発生したときに興味深い何かをログに記録することは非常に重要です。問題をデバッグする方法を知る唯一の方法がデバッガーを使用している場合、構築したサービスが一部のユーザーに対して破損しているにもかかわらず、ローカルで問題を再現できない場合、非常に窮地に立たされることになります。)

于 2008-10-10T05:09:47.747 に答える
2

詳細なデバッグ !

于 2008-10-10T04:42:22.903 に答える
1

私はこれを「クイック・アンド・ダーティー・デバッギング」、または単に「ダーティー・デバッギング」という用語で常に知っていました。

于 2008-10-10T05:17:25.673 に答える
1

手動アサーション? デバッガ恐怖症?

于 2008-10-09T23:34:12.633 に答える