2014-04-28 20 views
5

này là khá trần xương, có nghĩa là để chỉ nhận được chương trình đi để tôi có thể gỡ lỗi những phần phức tạp hơn:Tại sao chương trình của tôi không thể mở tệp khi gỡ lỗi trong 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; 
} 

Chương trình biên dịch tốt. Nếu tôi thực thi debug thực thi từ \ Projects \ [project này] \ Debug \ [program] .exe bằng cách nhấn đúp hoặc duyệt qua cmd, nó sẽ mở file (được lưu trong cùng thư mục đó) và phần còn lại của chương trình hums cùng độc đáo (cho đến khi nó được đến các phần buggy tôi thực sự muốn gỡ lỗi, anyways).

Tuy nhiên, nếu tôi cố gắng 'Bắt ​​đầu gỡ lỗi' từ trong VS2013, lỗi trên không thành công; nó in lỗi và đóng ngay lập tức. Cửa sổ cmd mà chương trình đang thực thi khi trong chế độ gỡ lỗi của khóa học hiển thị thư mục trong vùng tiêu đề, và nó chắc chắn là cùng một thư mục, nhưng tôi đoán nó đang tìm tập tin ở đâu đó khác. Tôi đã thử sao chép nó vào thư mục gốc, không có niềm vui ở đó. Tôi chắc chắn điều này chỉ làm việc tốt trong các phiên bản trước của VS, nhưng có lẽ tôi chỉ là não-farting ở đây. Bất kỳ ý tưởng?

+0

Thư mục làm việc mặc định để khởi động chương trình đang chạy trong trình gỡ lỗi studio trực quan là thư mục * project * (nơi tệp vcprojx của bạn được đặt). Tiêu đề bạn thấy là đường dẫn của tệp thực thi; không phải thư mục làm việc. Chỉ định đường dẫn đầy đủ trong đầu vào của bạn hoặc thay đổi cài đặt dự án thành thư mục làm việc bạn muốn, * sau đó * kích hoạt quá trình trong trình gỡ lỗi. – WhozCraig

+0

Khi bạn chạy/gỡ lỗi chương trình từ Visual Studio, thư mục hiện tại là thư mục dự án. –

+1

Bởi vì nó là microsoft. Họ viết phần mềm để làm gián đoạn các nhà phát triển và thu thập thông tin tình báo về những gì mọi người đang viết mã. Họ không quan tâm đến việc tạo điều kiện cho các nhà phát triển, nếu họ đã làm mất đi sự độc quyền của họ. Visual Studio được thiết kế để làm tê liệt và là một môi trường phát triển không hiệu quả vì nó có thể có thể. Thậm chí không có bất kỳ công cụ rò rỉ bộ nhớ sane/valgrind hoặc hệ thống hàng rào điện để săn lùng rò rỉ bộ nhớ. Windows phát triển là địa ngục. – Owl

Trả lời

5

Trong thuộc tính dự án trong Visual Studio, bạn có thể đặt thư mục hiện tại để bắt đầu chương trình gỡ lỗi. Theo mặc định, cài đặt này được đặt thành vị trí của tệp .vcxproj, tức là không phải là vị trí của tệp thực thi.

Đồng thời, các đường dẫn tương đối được chuyển đến std các trình tạo luồng tệp được diễn giải tương đối so với thư mục hiện tại của chương trình, đó là lý do tại sao nó không thành công cho bạn khi gỡ lỗi nhưng không chạy trực tiếp. Thay vào đó, nếu bạn khởi chạy chương trình bằng cách sử dụng các lệnh cmd này:

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

Nó sẽ thất bại theo cùng một cách.

Để sửa đổi thư mục khởi động được Visual Studio sử dụng khi gỡ lỗi, hãy truy cập Project > Properties > Configuration Properties > Debugging > Working Directory. Lưu ý rằng cài đặt là cấu hình cụ thể (nghĩa là bạn có thể có một thư mục khởi động khác nhau cho mỗi cấu hình). Nếu bạn muốn đặt nó vào thư mục chứa tệp thực thi, bạn có thể sử dụng macro $(OutDir).

Có lẽ tốt hơn là, bạn có thể muốn di chuyển tệp dữ liệu vào thư mục nguồn dự án, vì nó không phải là tạo phẩm xây dựng.

+0

Tuyệt vời, cảm ơn. Tôi biết nó phải là một cái gì đó đơn giản như thế, nhưng google cho tôi xuống. Tôi khá chắc chắn tôi đã không bao giờ cần phải làm điều đó trong các phiên bản trước của VS (hoặc có lẽ tôi chỉ tìm ra để cung cấp cho nó các tập tin như \ Debug \\ [tập tin], những người hiểu biết ...) Dù sao, cảm ơn vì nhận được tôi qua bộ não này thất bại. – jmassey

+0

@jmassey Sau đó, bạn phải có được đặt các tập tin ở nơi khác. Thư mục làm việc mặc định luôn là '$ (ProjectDir)', tức là vị trí của '.vc [x] proj'. – Angew

+0

Vâng, tôi đã thêm bản chỉnh sửa ở trên; nó có thể đã được rằng trong quá khứ tôi đã tìm ra cách để làm điều đó một mình.Tôi đã không phải chọc VS trong nửa năm hoặc lâu hơn, và tôi sử dụng lần cuối năm 2010. Có lẽ tất cả bóng đã làm tôi mù quáng. Cảm ơn một lần nữa, mặc dù. – jmassey

Các vấn đề liên quan