デバッガーが役立つことはわかっていますが、現時点ではデバッガーの使用に関する知識が少し不足しています。しかし、私はそれをできるだけ早く学び始めることを約束します!したがって、プロンプトを介してgdbの使用方法を学ぶ方法について、誰かがよく読んでいることも知っている場合。よろしくお願いします!ありがとう。
3 に答える
GCCを使用している場合は、GDBを使用することを心からお勧めします。
私はEclipseが大好きです...しかし、私は通常、コマンドラインがより速く、より便利だと感じています。私見では...
とりあえず:
1)デバッグを可能にするために「-g」を使用してコンパイルします。
2)gdb内でプログラムを実行します。
3)クラッシュする行番号に注意してください
4)後方を見て、割り当てていない行に何かがあるかどうか、すでに割り当てを解除していないか、またはおそらく、配列アクセスが正しくないことで上書きしていないかを確認します。
GDBに関するいくつかの優れた短いチュートリアルを次に示します。
「お役に立てば幸いです。
PS:
デバッグを開始するときは、「Nodes」コンストラクターとManipulateArrayコンストラクターにブレークポイントを設定することをお勧めします。
ブレークポイントに到達しなかった場合...オブジェクトが作成されることはありません...そしておそらくバグを見つけました:)
うわー、それはコードの1つの大きな混乱です。それが何のためにあるのか私にはわかりませんが、私が見ることができる1つの問題があります
クラスには、と呼ばれる4つのポインタNode
の配列があります。コード内で、これらのポインターが何かを指すようにすることはありません。ただし、メソッドでこれらのポインターを逆参照します。それはまさにそこにあるセグメンテーション違反です。Node
attachedNode
attachNewNode
コードが何をしているのかよくわからないので、その問題(または他の問題があるかもしれませんが、いくつかあると思います)を修正するようにアドバイスする方法がわかりません。
ただし、アドバイスが1つあります。このコードは大きすぎて複雑すぎます。最初に小さな部分を機能させてから、徐々にプログラム全体を構築していきます。ゆっくりと着実なアプローチは、最終的にはより速くそこに到達します。
簡単に見ると、void Node :: attachNewNode(Node * newNode、int direction){* newNode = *attachNode[direction];}に障害があるようです。割り当てはattachedNode[direction]=newNode;である必要があります。ある方向に新しいノードを接続したい。