2012-11-26 5 views
7

Mam problem z czasem pracy z moją matlab c/C++ shared lib. Biblioteka eksportuje, a aplikacja jest skompilowana i połączona poprawnie. Ale w czasie wykonywania skrypt wydaje się mieć wiele błędów. W oknie konsoli (wyświetlającym wyjście MATLAB) mojej aplikacji nie wyświetla się żaden błąd. Ale debugger pokazuje wiele niezatłoczonych wyjątków w biegu. Ale skrypt wydaje się działać, a aplikacja kończy się poprawnie.Matlab Shared C/C++ lib w VS10/12 rzuca wiele wyjątków

Niektóre rzeczy wiedzieć:

  • Opierając się na Windows 8 Pro x64
  • Visual Studio 2012 (ustawienia projektu są VS 2010, który jest zainstalowany prawidłowo)
  • Matlab R2012b (32bit) (wersja 64-bitową jest również zainstalowany, ale nie tutaj stosowane, o ile wiem)
  • MCR R2012b win32/64 jest zainstalowany
  • Compiler stosowane w Matlab Compiler jest jeden VS2010 (kompilacja z GUI kompilatora)

Cóż, tutaj jest m-file jestem eksporcie do udostępnionego lib:

% 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) 

Jeśli masz kamerę internetową na komputerze skrypt powinien działać bez błędów!

Teraz główny plik 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; 
} 

Wygląda dobrze aż do teraz? Po załadowaniu pakietu bibliotek DLL zaczyna się bałagan. Spójrz wyjątków i gówno wyrzucony:

'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. 

Dobrze ów wychodzi na chwilę, a następnie:

'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. 

to nie wszystko ...

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. 

Cały plik ma 6000 l Ines ... W razie potrzeby opublikuję! Tutaj zatrzymuje się mimo wszystko:

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). 

byłbym zadowolony na każdą nutą, z góry dzięki!

+0

Wiele z tych komunikatów wydaje się być związanych z tym, że nie ma symboli debuggera zdefiniowanych dla biblioteki DLL. To gdzieś się zawiesza, próbuje przejść do trybu debugowania i kończy się niepowodzeniem. –

+0

Również. Czy próbowałeś skompilować prosty program typu "cześć świat"? Czy twój kompilator działa zwykle bez błędu? Jednym z moich ulubionych taktów jest naprawianie/dodawanie linii do skryptu matlab i sprawdzanie, kiedy dokładnie się nie uda. –

Odpowiedz

2

Są to wyjątki pierwszej szansy i nie oznacza to problemu. Widziałem ich dużo w mojej poprzedniej pracy i Matlab miał tendecy do produkcji wielu wyjątków, które nie były prawdziwym problemem.

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

Czy pierwszy wyjątek szansa znaczy, że jest to problem w moim kodu? Komunikaty o wyjątkach pierwszej szansy najczęściej nie oznaczają, że problem występuje w kodzie.W przypadku aplikacji/komponentów, które z wdziękiem obsługują wyjątki, wiadomości o wyjątkach pierwszej szansy informują programistę, że napotkano wyjątkową sytuację i że została ona obsłużona.

+0

Prawdziwym problemem jest to, że MATLAB rzeczywiście rzuca _lot_ wyjątków, zarówno podczas inicjalizacji, jak i podczas wykonywania. Są oczywiście obsługiwane wewnętrznie, ale wydaje mi się, że to pokazuje, że ich model programowania zawiera anty-wzorce używania wyjątków, zamiast innych bardziej odpowiednich metod kontroli przepływu, a także połykania potencjalnie ważnych wyjątków (kiedy debuguję aplikację bazującą na MATLAB-ie Często znajduję zatrzymanie debuggera za pomocą wyjątku AccessViolation czytającego pewną bliską zera lokalizację pamięci.) – Mozzis

Powiązane problemy