10

C++ コードがいくつかあり、それをデバッグしようとしています。main.cpp:

#include <iostream>
using namespace std;

int main() {
    graph<int> a;
    a.add(1);
    a.addEdge(1,2);
    std::vector<int> answ = a.getAdjacent(1);
    for (unsigned int i = 0; i < answ.size(); i++)
    std::cout<<answ[i]<<std::endl;
    return 0;
}

「graph a;」にブレークポイントがあります。しかし、デバッグを開始すると、次のようになります。

The target endianness is set automatically (currently little endian)
No source file named C:\Users\home\workspace\graphcpp\main.cpp.
[New Thread 3552.0xdc8]

どうしたの?

4

2 に答える 2

0

「main()」関数に標準パラメーターを追加するだけで十分なようです (「main()」でパラメーターを使用していないことに気付きました:

このリンクを確認してください

この問題も見られます。LinuxQuestions.org の人々は、私が進歩するのを助けてくれました... http://www.linuxquestions.org/questions/showthread.php?t=518283

gcc 4.1.0 (つまり、SUSE 10.1、32 ビット) には最適化があり、main() の本体で argc と argv を使用しない場合、これらのシンボルはバイナリに存在しないようです ( -g で、特別な最適化がオンになっていない場合)。64 ビット コンパイラは、これを偶発的に行いません。

argc/argv を使用しない (gcc 4.1.0 でコンパイルされた) プログラムで単に「メインを中断」して argc を出力すると、gdbコマンドラインから「アドレス 0x0 のメモリにアクセスできません」というメッセージが表示されます。あなたの例ではargc/argvを使用していないことに注意してください。

これは、C または C++ のコンパイルに当てはまります。

Eclipse は、最初のブレークに達したときに、何らかの形でこのエラーに混乱していると思われます。また、 argc/argv を参照するコードを追加するか、main (C++ の場合) を "int main(int, char *[])" として再宣言するまで、それ以上のブレークポイントで停止することができないため、Eclipse は予期していませんでした。それらのシンボル。

gdb の出力ウィンドウにはまだエラーがあります (現在のコンテキストに "new" という記号がありませんか?) が、ブレークポイントを設定できます。

HTH、-ニック

于 2016-04-25T09:33:14.927 に答える