gdb springt per step nicht in die gewünschte funktion
-
Hilfe ich kann folgendes Programm nicht debugen:
read.cpp:
#include <fstream> #include <string> #include <deque> #include <iostream> void read(std::ifstream &file, std::deque<std::string> &code); void load(std::deque<std::string> code, int argc, char *argv[]) { std::ifstream file; if(argc==1) { char filename[255]; std::cout<<"Test umgebung zum entweickeln von Scrabi.com"<<std::endl<<"Dateinamen und ggf. Pfad:"<<std::endl; std::cin.getline(filename, 255); file.open(filename, std::ios::in); }else file.open(argv[1], std::ios::in); read(file, code); } void read(std::ifstream &file, std::deque<std::string> &code) { std::string puffer; while(!file.eof()) { std::getline(file, puffer); code.push_back(puffer); } }
main.cpp:
#include <iostream> #include <deque> #include <string> #include "PSC.h" int main(int argc, char *argv[]) { std::deque<std::string> code; load(code, argc, argv); for(std::deque<std::string>::iterator carrow=code.begin(); carrow!=code.end(); carrow++) { std::cout<<*carrow; } }
Wenn ich debuge, und dann mit step (gdb) in die Funktion load(), Zeile 10 gehen will, komme ich nicht bei read.cpp : Zeile 8 , sondern in irgend einer Bibliothek, sieht so aus als hätte die irgend was mit der deque zu tun. Weiß jemand wo ich da raus gekommen bin, und wie ich da hin gelange wo ich hin will?
-
Wenn ich raten müsste, würde ich sagen, du landest im Copy-Construktor der deque - der aufgerufen wird, um den Parameter von load() zu initialisieren.
btw, das Problem mit deinem Code dürfte genau diese Kopie sein
die deque wird am Ende der Funktion freigegeben und die Variable in der Hauptfunktion bekommt nichts von der Aktion mit. Lösung dazu ist eine Übergabe per Referenz
void load(std::deque<std::string& code,...)
-
Das ist das was
step
mach.step
geht in jede Unterfunktion rein. Dazu zählen auch Funktionen die indirekt aufgerufen werden, wie zum Beispiel hier die Kopierfunktion einer deque. Wenn du das nicht möchtest, benutzenext
, welches zur nächsten Zeile geht, ohne dabei Unterfunktionen zu verfolgen. Wenn du gezielt in load anhalten möchstest, dann setz dort einen breakpoint, hinter der Parameterübergabe, z.B. in Zeile 10.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Irgendwie kapier ich das mit der Übergabe nicht. Muss ich das schreiben void read(std::deque<std::string &> &code); ?
-
Bei der read()-Funktion stimmt die Übergabe, aber die load()-Funktion sollte den Parameter auch als Referenz übergeben bekommen.
-
Ok danke