2014-04-28 8 views
5

Questo è piuttosto scarno, destinate a ottenere solo il programma di andare in modo da poter eseguire il debug le parti più complesse:Perché il mio programma non può aprire un file durante il debugging in VS2013?

//open file 
cout << "Input File Name: "; 
string fileName;  
cin >> fileName; 
ifstream file; 
file.open(fileName, ios_base::in); 
if (!(file.good())){ 
    cout << "File Open Error\n";   
    return 0; 
} 

Il programma viene compilato bene. Se eseguo l'eseguibile di debug da \ Projects \ [questo progetto] \ Debug \ [programma] .exe semplicemente facendo doppio clic o navigando lì tramite cmd, si aprirà il file (che è memorizzato nella stessa directory) e il resto del programma canticchia bene (fino a quando non arriva alle parti buggy che in realtà voglio fare il debug, comunque).

Tuttavia, se provo a "Avviare debugging" da VS2013, quanto sopra non riesce; stampa l'errore e si chiude immediatamente. La finestra di cmd in cui il programma si sta eseguendo quando in modalità di debug mostra chiaramente la directory nell'area del titolo, ed è sicuramente la stessa directory, ma suppongo che stia cercando il file da qualche altra parte. Ho provato a copiarlo anche con la radice del volume, nessuna gioia lì. Sono certo che questo ha funzionato bene nelle versioni precedenti di VS, ma forse sto solo facendo il brainstart qui. Qualche idea?

+0

La directory di lavoro predefinita per l'avvio di un programma in esecuzione sotto il debugger di Visual Studio è la directory * project * (dove si trova il file vcprojx). Il titolo che vedi è il percorso dell'eseguibile; non la directory di lavoro. Specificare un percorso completo nel proprio input o modificare le impostazioni del progetto nella directory di lavoro desiderata, * quindi * avviare il processo nel debugger. – WhozCraig

+0

Quando si esegue/esegue il debug del programma da Visual Studio, la directory corrente è la directory del progetto. –

+1

Perché è Microsoft. Scrivono software per disturbare gli sviluppatori e raccogliere informazioni su ciò che le persone stanno codificando. Non hanno alcun interesse nel consentire agli sviluppatori, se lo facessero, perderebbero il loro monopolio. Visual Studio è progettato per essere paralizzante e poco ergonomico come un ambiente di sviluppo. Non ci sono nemmeno strumenti di perdita di memoria sani di mente/valgrind o sistemi di recinzione elettrici per la ricerca di perdite di memoria. Lo sviluppo di Windows è un inferno. – Owl

risposta

5

Nelle proprietà del progetto in Visual Studio, è possibile impostare la directory corrente in cui avviare il programma di debug. Per impostazione predefinita, questo è impostato sulla posizione del file .vcxproj, vale a dire che è non il percorso dell'eseguibile.

Allo stesso tempo, i percorsi relativi al passato std di file costruttori flusso vengono interpretati relativo alla directory corrente del programma, che è il motivo per cui non riesce per l'esecuzione del test, ma non quando si esegue direttamente. Se invece avvii il programma utilizzando questi comandi cmd:

>cd some\random\dir 
>C:\path\to\your\Projects\[this project]\Debug\[program].exe 

Fallirebbe esattamente nello stesso modo.

Per modificare la directory di avvio utilizzata da Visual Studio durante il debug, andare a Project > Properties > Configuration Properties > Debugging > Working Directory. Si noti che l'impostazione è specifica della configurazione (ad esempio, è possibile avere una directory di avvio diversa per ogni configurazione). Se si desidera impostarlo nella directory contenente l'eseguibile, è possibile utilizzare la macro $(OutDir).

Forse preferibilmente, è possibile spostare il file di dati nella directory di origine del progetto, in quanto non è un artefatto di build.

+0

Fantastico, grazie. Sapevo che doveva essere qualcosa di semplice, ma google mi ha deluso. Sono abbastanza sicuro di non aver mai avuto bisogno di farlo nelle versioni precedenti di VS (o forse ho appena capito di dargli il file come \ Debug \\ [file], chissà ...) Comunque, grazie per essere passato non riesco a superare questo cervello – jmassey

+0

@jmassey Quindi devi aver posizionato i file altrove. La directory di lavoro predefinita è sempre stata '$ (ProjectDir)', cioè la posizione di '.vc [x] proj'. – Angew

+0

Sì, ho aggiunto una modifica sopra; potrebbe essere solo che in passato ho capito come farlo da solo.Non ho dovuto usare VS per circa sei mesi e l'ultima volta ho usato il 2010. Forse tutto il lucido mi ha accecato e hehe. Grazie ancora, però. – jmassey

Problemi correlati