Czy jest jakiś sposób do debugowania, co się dzieje po mojej kod .NET wywołuje funkcję w niezarządzanych dll poprzez dllimport?

głosy
4

Czy jest jakiś sposób do debugowania, co się dzieje po mojej kod .NET wywołuje funkcję w niezarządzanych dll poprzez dllimport?

I narazić funkcję dll wewnątrz niekontrolowana przez dllimport. Kiedy wywołać funkcję jak I krok poprzez kod, coś się dzieje i nigdy nie wraca.

Czy mogę coś zrobić, być może ze względu debugowania lub cokolwiek, aby uzyskać jakiekolwiek informacje? Albo jestem SOL?

Utwórz 27/08/2009 o 03:28
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
6

Cóż, na początek, upewnij się, że masz włączone debugowanie kodu natywnego w zakładce Debug właściwości twojego projektu.

Jeśli masz kod źródłowy biblioteki DLL, do której dzwonisz do, to powinieneś być w stanie ustawić go tak, że można wejść w rodzimym DLL tak jak możesz z kodu zarządzanego. Najprostszym sposobem na to jest dodanie kodu źródłowego dla rodzimej DLL w tym samym roztworze, a następnie połączyć z wyjściem tego projektu. Musisz upewnić się, że Visual Studio można uzyskać dostęp zarówno rodzimych DLL i że WPB DLL podczas uruchamiania aplikacji C #.

Jeśli nie masz kod źródłowy biblioteki DLL, to sugeruję ustawienie przerwania tuż przed wywołaniem do metody natywnej. Następnie niech program dalej i wstrzymać program ręcznie po sekundzie czy dwóch. Upewnij się, że wciąż szuka w tym samym wątku, który wywołał w rodzimym DLL, a następnie spojrzeć na widza stosu wywołań. Jeśli pojawi się wiersz, który mówi „[Kod zewnętrzny]”, upewnij się, że „Pokaż kod zewnętrzny” jest zaznaczone w menu kontekstowym. Kiedy to jest zaznaczone, stos wywołań może być w stanie powiedzieć, jaka metoda jest aktualnie wykonywany. Tekst będzie w kolorze szarym, co wskazuje, że metoda ta jest w zewnętrznym pliku DLL. Jeśli dokonujesz wywołania metod Windows, a następnie zainstaluje pliki Symbol Okna pierwszy może zezwolić debugger, aby dać Ci więcej informacji ( http://www.microsoft.). Można również zatrzymać i kontynuować debugger kilka razy, aby sprawdzić, co stos wywołań wygląda w różnych punktach wykonania. Z tych informacji, może być w stanie zorientować się, co się dzieje źle.

Spróbuj też przechodząc w różnych argumentów, zaczynając od najbardziej trywialnym przypadku można i zobaczyć, czy masz takie samo zachowanie. Na koniec, aby uzyskać pewność, że masz wszystkie metadane marshalling poprawne.

Odpowiedział 27/08/2009 o 04:40
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more