Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[VS2005] Native dll steppen vanuit managed code

Pagina: 1
Acties:

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11 20:29
Ik ben bezig om een fout op te sporen in een third party applicatie. De applicatie bestaat uit drie delen:
  • Een frontend, geschreven in c#
  • Een "glue-dll" geschreven in managed c++
  • Een backend dll, geschreven in c++
Ik heb van alle drie de source, en ik heb alle drie de delen ook zelf gecompileerd (ik heb dus de symbols).

De glue DLL laadt de backend met de volgende code:
C++:
1
2
pin_ptr<const wchar_t> Ptr = PtrToStringChars(KnownPlatforms[PlatformIndex].DLL);
CachedData.DLLHandle = LoadLibraryW(Ptr);


Hierna verschijnt de geladen dll echter niet in de modules list. Als ik daarna een van de dll-exports aanroep, wordt die functie wel uitgevoerd, maar als ik er probeer in te steppen gaat dit niet. (step into gedraagt zich als step over)
C++:
1
2
3
// get the function pointer to the accessor
FuncGetBackendSupport GetSupportFunc = (FuncGetBackendSupport)GetProcAddress(CachedData.DLLHandle, "GetBackendSupport");
CachedData.BackendSupport = GetSupportFunc();


Als ik in GetConsoleSupport een fout veroorzaak, (bijv *((INT*)0)=1; ) dan wordt die fout door VS2005 gemeld als een fout in de glue-dll, niet op de plek waar ik die fout veroorzaak, met een "[Managed to native transition]" boven op de callstack. DebugBreak() in de backend DLL wordt genegeerd. Ook als ik op een later moment de debugger attach, gedraagt die zich alsof de backend DLL niet geladen is; zelf niet als er op dat moment code uit de backend DLL wordt uitegevoerd.

Ik ben inmiddels een beetje radeloos. Code debuggen zonder step-functie is eigenlijk niet haalbaar, en de backend-dll buiten de frontend om debuggen is ook niet zinvol (ik moet echt de interactie tussen die twee hebben). Heeft iemand een idee hoe ik vs2005 zo ver krijg om zich te gedragen zoals het zich bij andere code gedraagt?

Localhost, sweet localhost


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je zou behalve de debugger natuurlijk ook wat 'traces' kunnen gebruiken of wat (tijdelijke) logging inbouwen zodat je tussentijdse gegevens even ergens wegschrijft o.i.d.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Visual Studio heeft meerdere debuggers, de Managed en Native. Je kunt Managed code niet zomaar met de Native debugger debuggen, of andersom.

De "if everything else fails" methode is Debugging Tools for Windows gebruiken. Die werkt in veel meer omstandigheden, maar is minder vriendelijk.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein