コードの中であなたの場所を維持するための良いテクニックは何ですか?


21

ブックマークを使用してコードの1つのポイントを覚えていることを理解しています。しかし、調査しているコードの流れをどのように追跡しますか?例:複数のブックマークとそれらが作成された順序。

例:

  1. バグレポート:「壁の角で衝突が機能していません」

    1. バグを再現すると、特定のポリゴンが衝突しないことがわかります。
    2. 衝突コードは利用できない開発者によって書かれました。そのため、調査は次のようになります。

フローのスキーマ

調査中、特にGoogleなどの非コードアイテムを確認する場合、コード内での位置を失うことが合理的に予想される場合があります(このコードパスを既に見ましたか?またはどのコードパスを調査しましたか?この関数などに)。避けられない中断についても同じことが言えます(ボス:[Lengthy Pointless Report] NOWなどが必要です

コード内での自分の位置を追跡する方法を提供するためのテクニックやツールのリソースがあると便利です。


編集:上記の例は、回答を必要とする実際の問題ではなく、潜在的な説明として意図されています。

この質問を表現する別の方法は次のとおりです。

新しいシステムを学習するとき、コードを学習する際に現在の状態をどのように追跡しますか?それは理解することはありません理由コードは(コメントはのためにどうあるべきかである)、それが何を行いますが、どのようにそれはそれをしない(これはコードのみではなく、コメントを読んを通じて学習されます)。

回答:


14

バブルインターフェースは、大量のコードを一度に表示することでこの問題を解決しようとします。(グーグル用のブラウザにこだわっています)。見た目は素晴らしいですが、試したことはありません。 このバージョンのアイデアは、Visual Studio UltimateのVisual Studio実装です。


+1は問題に対する実用的ですぐに使えるソリューションであるためです。(それはほんの少し素晴らしいです!)
ジェステルフォード

私が頭の中で数年前に発明したものの1つは、それがすでに存在することを知るためだけです:( +1
フレネル

Squeakや他のSmalltalksでできることと似ているようです。Smalltalkでは、新しいコード参照ウィンドウを開いて、必要なメソッド/クラスにナビゲートできます。
ルドルフオラー

かなり素晴らしい...私はあなたのインターネットブラウジングを同様の方法で視覚化する小さなおもちゃアプリを作成しました(リンクをクリックすると、新しいノードが追加され、元にリンクされます)。それをコードの視覚化に適用することを考えたことがありません。
マイケルブラウン

12

言及されたすべての優れた技術は別として、昔ながらのA3の紙がこれらの問題の優れた助けであることがわかりました。アイデアを書き留めて、マインドマップスタイルで整理します。


うんうん。最良の答え。
パトリックヒューズ

10

エディターとデバッガーの両方が関数の定義にジャンプし、Webブラウザーのようなマルチレベルの「戻る」ボタンを使用して、以前の場所に戻ることができます。複雑なデバッグフローを追跡するには、通常これで十分です。また、多くのコミットを可能にするソース管理が役立ちます。それは私が何かをしようとしている理由を説明するコミットメッセージと、それが機能しない場合に変更を元に戻す簡単な方法を提供します。それ以外に、潜在的な見込み客と調査済みの見込み客をリストするシンプルなホワイトボードは、残りのギャップを埋めます。


1
非常に実用的です。この方法でソース管理を使用することは考えていませんでした。
ジェステルフォード

どのエディターとデバッガーですか?
ジョンゲインズジュニア

VimとGreen HillのMULTIデバッガー。
カールビーレフェルト

Visual Studioでは、戻るにはCTRL +-、進むにはCTRL + =です。
VitalyB

Eclipseは、別のパネルのカーソルの下に現在のシンボルの定義を表示できます。

3

追跡する複数の方法:

  • 書き留めてください。2分で会議ができましたか?あなたが何をしていたか、どこに書いてください。私はいつも、筆記するときに物事を書き留めるために横にペンと紙を置いています。
  • ブックマーク。10個の番号付きブックマークを設定できます。
  • スタックトレース。通過したコードの階層全体を簡単に表示できます。私のエディターでは、スタックトレースをコピーして保存することもできます。次回エディターを開くとき、高速ナビゲーションのためにスタックトレースをロードできます。
  • エディターナビゲーション。基本メンバーに移動し、継承者に移動し、使用法を見つけ、参照に移動します...

1

私はシンプルなソリューションを使用します。タスクが完了するまで何も閉じないでください。つまり、通常50ほど開いているウィンドウ/タブの1つに何かがあり、そこに戻ったときに考えていたことを思い出させます。


このアプローチの問題は、思考/研究の複数の並行ブランチをどのように追跡するかという傾向がありますか?
ジェステルフォード

1
私はそれが問題だとは思わない-それらはすべて同じようにオープンであり、どのブランチに戻るかはそれほど重要ではない。これはIDEよりもWebブラウザーの方が適切に機能しますが、それは単に、現在のコードベースが概念的に実際に編成されていないからかもしれません。
トムクラークソン

1

本物の開発者ツール/ IDEを手に入れましょう。Vi、Emacs、Eclipse、または何でも(その選択は最良の議論と同じくらい大きいですが、それは別の問題です)、それを適切に使用することを学びます。あまりにも多くのように、メモ帳のようにシンタックスハイライトを使用してはいけません。ホットキーの使用方法を学び、一般的なアクションにマウスを使用しないでください(遅すぎる)。大画面(最低1920x1200)が有益です。

私の開発ツールには、名前付き(より遅いが便利な名前が永続的)と名前のない(挿入と削除が簡単)ブックマーク、前方参照と後方参照、参照検索がすべて1つにまとめられています、todoと開発者(個人およびグループ全体)のメモソースコードの特定の行。さらに別のプラグインをインストールすることなく、すべての言語を実行します。

私は、半ダース以上の100万個とSLOCモジュールで構成されるコードベースで、半ダースの言語を使用しています。明らかに、一度にすべての作業を行うのではなく、1つか2つの小さな部分に焦点を当てていますが、いくつかのアクションを使用して、自分がしていることに依存しないコードの任意のポイントに移動できます。


適切なIDEが最適であることに同意します。私はvimの素晴らしいマークとタグジャンプ機能を使用しています。ただし、どちらにも制限があります。マークはバッファローカルであり、タグ履歴は線形です。複雑な状況では、これで十分ではありません(したがって、この質問をします)。
ジェステルフォード

1
私はViのアマチュアですが、いくつかの短いスクリプトを書く準備ができているパワーユーザーの手でそれを使って何ができるか見て、VIMを実際に使用することを学ぶために時間を費やしたり、機能がセットアップされているツールに変更したりしましたあなたのために働く方法、そしてそれを学ぶのに時間を費やしました。それが私のポイントです。ツールを学びましょう。良い商人は彼のツールを責めません、ニーザーは良いプログラマーをします。
マッテンツ

同意した。私はvimの上級者です(ほとんどの時間を考えずに使用できますが、ほとんど表面を傷つけていません)ので、私は知らないことがあると確信しています。それでも、vi(m)でpsrの答えのような何かをすることができるとは思いません(少なくとも、私の研究からではありません)。
ジェステルフォード

@Jess:マークは必ずしもバッファローカルではありません。大文字を使用したマークはグローバルです。
デイブカービー

@DaveKirby恐ろしい-私はvimのについての新しいことを学ぶのが大好き:D
ジェステルフォードの

1

Visual Studioのデバッグセッションでは、「コールスタック」ウィンドウ(Debug / Windows / Call Stackショートカット内またはショートカットで有効にすることができますCtrl+Alt+c)を使用して、コードのフローを追跡できます。


1
ほとんどのデバッガーのように。問題は、コードベースの外部の調査を含め、コードを手動で参照するときの行に沿ったものです。
ジェステルフォード

1

コールグラフプロットを作成できる多くのツールについて誰も言及していないことに驚いています。私はdoxygenが大きな助けになることを発見しました。プログラム全体でdoxygenを使用することをコミットする必要さえありません。トレースしたい関数にタグ付けするだけです。


0

emacs には組織モードを使用します。これは、ユーバーのアウトラインツールです。それを使用して、コードの呼び出しスタックを模倣するアウトラインを記述し、ソースコード自体への直接リンクを含めることができます(org-store-link経由)。説明テキスト、ウェブページへのリンクなどを含めることができます(マジックナンバーをグーグルで検索する場合など)

完璧ではありません。たとえば、アウトライン構造にはレベルを戻すという概念がないため、単なるスタックではなく実行パスをトレースすることは困難です。しかし、私が見つけたのは、紙の上の図にとって次善の策です。

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