2013-09-10 82 views
5

Dường như có sự cố trong phiên bản được liên kết tĩnh của VS2012. Bắt đầu một ứng dụng bảng điều khiển trên một hệ thống cũ dẫn đến một ngoại lệ, bất cứ khi nào các luồng được sử dụng, mặc dù các hệ thống mới không gây rắc rối gì cả. Để tái sản xuất lỗi này nó là đủ đểNgoại lệ trong msvcrt được liên kết tĩnh bằng Visual Studio 2012

  • tạo một ứng dụng giao diện điều khiển mới trong VS2012
  • thêm dòng std::ofstream f; hoặc std::cout << "Hello World"; trong hàm chính (bao gồm fstream hoặc iostream theo yêu cầu)
  • chuyển sang v110_xp bộ công cụ (nếu được yêu cầu cho Windows XP)
  • chuyển sang các thư viện được liên kết tĩnh (/ MT)
  • bắt đầu thoát trên hệ thống cũ Luôn có ngoại lệ n.

Việc xóa đường có dòng hoặc cout luôn giải quyết được sự cố. Việc chuyển sang thư viện thời gian chạy được liên kết động (/ MD) luôn giải quyết được sự cố. Trong trường hợp của dòng, sử dụng tối ưu hóa kích thước (/ O1) hoặc không có tối ưu hóa (/ Od) thay vì tối ưu hóa tốc độ (/ O2) giải quyết được vấn đề.

Có ai có ý tưởng hay gợi ý không? Cảm ơn trước.

+0

Bạn đã thử chạy ứng dụng dưới trình gỡ rối trên Windows XP để tìm hiểu xem vi phạm quyền truy cập có xảy ra ở đâu không? Nếu bạn chưa cài đặt Visual Studio trên Windows XP, bạn có thể thiết lập [Remote Debugging] (http://msdn.microsoft.com/en-us/library/vstudio/y7f5zaaa.aspx). Visual Studio giao với mã nguồn để thực hiện CRT của nó. Đảm bảo bạn thêm thư mục vào thư mục * VC++ *. – IInspectable

+0

@IInspectable: Cảm ơn ý tưởng gỡ lỗi từ xa. Tôi sẽ cố gắng đó, nhưng gỡ lỗi từ xa với VS2012 và XP có vẻ là không dễ dàng: [Tôi có thể sử dụng trình gỡ lỗi từ xa Visual Studio 2010 trên Windows XP để gỡ lỗi một ứng dụng .Net 4.0 từ Visual Studio 2012?] (Http: // stackoverflow .com/questions/14444055/can-i-use-the-visual-studio-2010-xa-gỡ lỗi-trên-windows-xp-to-debug-a-net-4) – user2766445

+0

@IInspectable: Gỡ lỗi từ xa không hoạt động với Visual Studio 2012 và Windows XP. Trình gỡ rối từ xa Visual Studio 2012 yêu cầu "phiên bản Windows mới hơn". Tôi đã cố gắng để cài đặt trình gỡ lỗi từ xa Visual Studio 2010 và cố gắng kết nối từ Visual Studio 2012 - mà không hoạt động. – user2766445

Trả lời

2

giải quyết bằng bản thân mình - Giả định đầu tiên của tôi đã sai:

Visual Studio 2012 sử dụng SSE2 hướng dẫn theo mặc định. Điều này gây ra sự cố trên các hệ thống cũ như Intel Pentium III hoặc AMD Athlon XP, không hỗ trợ SSE2. Một ngoại lệ lệnh không hợp lệ được ném. Bạn có thể chuyển đổi SSE2 bằng cách sử dụng tùy chọn biên dịch /arch:IA32.

Msvcrt được liên kết động (DLL) hoạt động trong mọi trường hợp, vì nó không bị ảnh hưởng bởi tùy chọn biên dịch /arch.