2012-11-26 18 views
7

tôi gặp vấn đề thời gian chạy với matlab c/C++ shared lib. Xuất thư viện và ứng dụng là được biên dịch và liên kết chính xác. Nhưng vào thời gian chạy, tập lệnh dường như có nhiều lỗi. Không có lỗi nào được hiển thị trong cửa sổ bảng điều khiển (hiển thị đầu ra MATLAB) của ứng dụng của tôi. Nhưng trình gỡ lỗi hiển thị nhiều trường hợp ngoại lệ chưa được thực hiện khi đang chạy. Nhưng kịch bản dường như chạy qua và ứng dụng chấm dứt chính xác.Matlab Shared C/C++ lib trong VS10/12 ném rất nhiều ngoại lệ

Một số điều cần biết:

  • xây dựng trên Win8 Pro x64
  • Visual Studio 2012 (thiết lập dự án là VS 2010, được cài đặt một cách chính xác)
  • Matlab R2012b (32Bit) (64Bit phiên bản là cũng được cài đặt, nhưng không được sử dụng ở đây, theo như tôi biết)
  • MCR R2012b win32/64 được cài đặt
  • Trình biên dịch được sử dụng trong Matlab Trình biên dịch là trình biên dịch VS2010

Vâng, đây là m-file tôi đang xuất khẩu sang một lib chia sẻ:

% Create video input object. 
vid = videoinput('winvideo', 1, 'YUY2_320x240') 

% Set video input object properties for this application. 
set(vid,'TriggerRepeat',Inf); 
vid.FrameGrabInterval = 3; 

% Set value of a video source object property. 
vid_src = getselectedsource(vid); 
set(vid_src,'Tag','motion detection setup'); 
set(vid,'ReturnedColorSpace','rgb'); 

% Create a figure window. 
figure; 
% wiener filter neighbourhood 
wienerFilter = [5 5]; 
% Start acquiring frames. 
start(vid) 

% Calculate difference image and display it. 
while(vid.FramesAcquired<=200) % Stop after 200 frames 
    data = getdata(vid,2); 

    first_img = wiener2(rgb2gray(data(:,:,:,1)), wienerFilter); 
    second_img = wiener2(rgb2gray(data(:,:,:,2)), wienerFilter); 

    bw_img = im2bw(first_img); 

    diff_im = imabsdiff(first_img,second_img); 

    subplot(1,3,1), imshow(first_img); 
    subplot(1,3,2), imshow(second_img); 
    subplot(1,3,3), imshow(diff_im); 

end 

stop(vid) 

delete(vid) 
close(gcf) 

Nếu bạn có một webcam trên máy tính của bạn kịch bản nên chạy mà không có lỗi!

Bây giờ chính tập C++:

#include "stdafx.h" 
#include "MatlabCompilerSample.h" 

#pragma comment(lib, "MatlabCompilerSample.lib") 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    /* Call the MCR and library initialization functions */ 
    if(!mclInitializeApplication(NULL,0)) 
    { 
     const char* message = mclGetLastErrorMessage(); 
     printf_s(message); 
     fprintf(stderr, "Could not initialize the application.\n"); 
     exit(1); 
    } 

    if (!MatlabCompilerSampleInitialize()) 
    { 
     fprintf(stderr,"Could not initialize the library.\n"); 
     exit(1); 
    } 

    /* Call the implementation function */ 
    WebcamSample(); 

    /* Call the library termination function */ 
    MatlabCompilerSampleTerminate(); 

    mclTerminateApplication(); 
    return 0; 
} 

Trông tốt cho đến bây giờ? Sau khi tải một loạt các dlls mess bắt đầu. Nhìn vào trường hợp ngoại lệ và tào lao ném:

'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\WinSxS\x86_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_49768ef57548175e\MFC90DEU.DLL'. Module was built without symbols. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: std::runtime_error at memory location 0x003DF4A0. 
SetThrowSegvLongjmpSEHFilter(): filter function installed 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003D6210. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003D5A4C. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003D6210. 

Well thats tiếp tục một thời gian và sau đó:

'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\profapi.dll'. Cannot find or open the PDB file. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x060EFD98. 
The thread 0x2478 has exited with code 0 (0x0). 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DE000. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DD83C. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DE000. 

Thats không phải tất cả ...

First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DD0B4. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DDEA0. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x061EF980. 
The thread 0x282c has exited with code 0 (0x0). 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DE328. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DDB64. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DE328. 

...

First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DE1C8. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x061EFC14. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x060EFDEC. 
The thread 0x32a4 has exited with code 0 (0x0). 
The thread 0x350c has exited with code 0 (0x0). 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x060EFC1C. 
The thread 0xfd8 has exited with code 0 (0x0). 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x05FEFC7C. 
The thread 0x2144 has exited with code 0 (0x0). 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\client\jvm.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmm.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr71.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmmbase.dll'. Cannot find or open the PDB file. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: std::runtime_error at memory location 0x0771F404. 
SetThrowSegvLongjmpSEHFilter(): filter function installed 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\NapiNSP.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\pnrpnsp.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\nlaapi.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\mswsock.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dnsapi.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winrnr.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Program Files (x86)\Common Files\Microsoft Shared\Ink\tiptsf.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cfgmgr32.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\verify.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\java.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\hpi.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\zip.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\fontmanager.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\awt.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\apphelp.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\nativejmi.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\nativeservices.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\nativejava.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\net.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\nio.dll'. Cannot find or open the PDB file. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: std::runtime_error at memory location 0x0771F284. 
SetThrowSegvLongjmpSEHFilter(): filter function installed 
First-chance exception at 0x76AB4B32 (KernelBase.dll) in MatlabCompilerCPPExample.exe: 0x000006BA: Der RPC-Server ist nicht verfügbar. 
The thread 0x37b0 has exited with code 0 (0x0). 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey at memory location 0x0771C1B8. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey at memory location 0x0771C988. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x077189E7. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x0771B82C. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07717E57. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x0771ACA0. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\libmwbuiltins.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\mlint.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\version.dll'. Cannot find or open the PDB file. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07717E57. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x0771ACA0. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\libmwmathelem.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\libmwmathxps.dll'. Cannot find or open the PDB file. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: varflowFailedException at memory location 0x0771BCD7. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: varflowFailedException at memory location 0x0771BD82. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\hgbuiltins.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\nativemvm.dll'. Cannot find or open the PDB file. 
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\nativehg.dll'. Cannot find or open the PDB file. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey at memory location 0x07716AC0. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07714C0F. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07717A5C. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey at memory location 0x07717628. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x0771367F. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedExceptionNoUCB at memory location 0x077137EC. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07715940. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x077162C7. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07719110. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: varflowFailedException at memory location 0x07719773. 
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: varflowFailedException at memory location 0x077197EE. 

Toàn bộ tệp là 6000 l ines ... tôi sẽ đăng nó nếu cần thiết! Ở đây nó dừng lại sau khi tất cả:

First-chance exception at 0x76AB4B32 (KernelBase.dll) in MatlabCompilerCPPExample.exe: 0xA1A01DB2 (parameters: 0x1FD09FE6, 0x1FD08200, 0x00000000). 
The program '[3324] MatlabCompilerCPPExample.exe' has exited with code 0 (0x0). 

Tôi sẽ vui mừng cho mỗi gợi ý, cảm ơn trước!

+0

Nhiều thư trong số đó có vẻ liên quan đến thực tế là không có biểu tượng trình gỡ lỗi được xác định cho DLL. Nó treo ở đâu đó, cố gắng đi vào chế độ gỡ lỗi và không thành công. –

+0

Ngoài ra. Bạn đã thử biên dịch loại chương trình 'hello world' đơn giản chưa? Đường ống trình biên dịch của bạn thường chạy mà không có lỗi? Một trong những tác phẩm yêu thích của tôi ở đây là để remore/thêm dòng vào kịch bản MATLAB và xem chính xác khi nào nó không thành công. –

Trả lời

2

Đây là tất cả ngoại lệ cơ hội đầu tiên và không có nghĩa là có sự cố. Tôi đã nhìn thấy họ rất nhiều trong công việc trước đây của tôi và Matlab có một xu hướng để sản xuất rất nhiều ngoại lệ mà không phải là một vấn đề thực sự.

http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspx

Có một ngoại lệ cơ hội đầu tiên có nghĩa là có một vấn đề trong mã của tôi? Thông báo ngoại lệ cơ hội đầu tiên thường không có nghĩa là có sự cố trong mã.Đối với các ứng dụng/thành phần xử lý các ngoại lệ một cách duyên dáng, các thông báo ngoại lệ cơ hội đầu tiên cho phép nhà phát triển biết rằng một tình huống ngoại lệ đã gặp phải và đã được xử lý.

+0

Vấn đề thực sự là MATLAB thực sự ném một _lot_ ngoại lệ, cả trong quá trình khởi tạo và trong khi thực hiện. Chúng rõ ràng được xử lý nội bộ nhưng dường như với tôi rằng điều này cho thấy mô hình lập trình của chúng bao gồm các mẫu chống sử dụng các ngoại lệ thay vì các phương pháp kiểm soát luồng thích hợp khác và cũng nuốt các ngoại lệ có khả năng hợp lệ (khi tôi gỡ lỗi một ứng dụng dựa trên MATLAB Tôi thường sẽ tìm thấy trình gỡ lỗi dừng lại với ngoại lệ AccessViolation đọc một số vị trí bộ nhớ gần bằng không.) – Mozzis

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