c # - hvordan man debugger en dll (c-kode), der påberåbes af et c # -program

Indlæg af Hanne Mølgaard Plasc

Problem



Hej jeg har arbejdet på en c # applikation, der påberåber en dll-funktion. dll er c-kode, som faktisk initialiserer stikkontakter for at læse/skrive/manipulere data. dll er kompileret med debug info. Problemet er under nogle omstændigheder, at c # -programmet viser en besked og siger MemoryAccessViolation i dll'en, men viser ikke mere information. Jeg er grundlæggende en Linux-udvikler, så jeg vil gerne vide nogen mekanisme til at debugge sådanne problemer.

Bedste reference


Inden for Visual Studio i projektegenskaberne kan du aktivere fejlfinding af uhåndteret kode ved at klikke på fanen Debug og vælge den mulighed (Aktiver ustyret kodefejlfinding). Derudover kan du fortælle debuggeren at stoppe, når der opstår en undtagelse i din uhåndterede kode ved at trykke på <ctrl><alt>e (eller vælge denne mulighed under fejlfindingsmenuen) for at få vist undtagelsesdialogboksen.

Andre referencer 1


På fanen Fejlfinding skal du oprette uhåndteret fejlsøgning.


Hvis det ikke hjælper, er det nok hurtigst at debugere det med WinDbg, som skal stoppe udførelsen lige efter overtrædelsen af ​​hukommelsesadgangen.


Problemet er, at overtrædelsen kan være resultatet af en handling der skete langt tidligere.

Andre referencer 2


Der kan være bedre svar, men den generelle rute jeg ville tage ville være at:



  1. Prøv og få det til at medføre undtagelsen på forespørgsel. Med andre ord bestemme hvilke nøjagtige forhold der forårsager fejlen. Det kan tage lidt tid.

  2. Prøv at fange undtagelsen, når det sker i C # -koden. Hvis du er heldig, kan dette i det mindste føre dig til de trin, der er nødvendige for at gentage problemet i # 1.

  3. Hvis jeg har adgang til at ændre dll skrevet i c; Tilføj masser af logning. Forhåbentlig har du i det mindste en ide om, hvor dette kommer fra.


Andre referencer 3


Her er et forum indlæg med nogle tips:
http://social.msdn.microsoft.com/Forums/en/netfxcompact/thread/69e84750-6636-4656-bbd4-8d3586290af3[3]



  Start din administrerede kode som sædvanlig ved brug af VS debugger. Nu skal du starte en anden kopi af VS og vedhæfte den til den proces, du fejler. Vælg indbygget kode for denne anden debugger-instans. Nu skal du antage, at DLL allerede er indlæst (alt fra den DLL, der allerede er udført), du skal kunne indstille et pause punkt.

  
  Nogle gange hjælper det at vise meddelelsesboksen i den native DLL, så udførelsen vil stoppe, når du er interesseret i, og du kan vedhæfte native debugger og fortsætte.