Debugging D DLL from C# app with C linkage for native Unity 5 plugin

Rainer Schuetze via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Mar 29 23:39:07 PDT 2016



On 30.03.2016 01:41, Thalamus wrote:
> Apologies if this has been discussed before, but I wasn't able to find
> anything similar on the forums or web. I can't seem to figure out how to
> debug a D DLL from a C# EXE. (My actual purpose here is to use D to
> build native plugins for Unity 5, but Unity and Mono aren't necessary to
> repro the problem I'm running into.)
>
> The D DLL and C# are both built as 64-bit. (C# is not set to AnyCPU).
> Using VS 2015 and Visual D, I can drive the D DLL from the C# EXE
> without any problems, but the debugger doesn't load the D DLL symbols.
> The DLL and PDB are in the same folder as the C# EXE. Everything behaves
> the same if I link to the DLL statically using P/Invoke or dynamically
> using LoadLibrary.
>
> Everything from the D DLL is exposed as extern(C), listed in the .def,
> etc. When I drive the DLL from a D EXE, I can break into the debugger
> easily, whether I attach at launch or attach to the process when it's
> already running.
>
> I'm building the DLL using:
>
> dmd <obj files omitted for brevity> dllmain.d dll.def -w -wi -g -map
> -ofLogic.dll <res and lib files omitted for brevity> -m64 -debug -shared
>
> Anyone know what I should try next? Am I missing something simple? :)
>
> thanks!
> Thalamus
>
>

I haven't tried debugging a C# application, but you might have to 
disable "Just My Code" in the global debugger options. Also make sure to 
allow native debugging (JIT options).

When debugging Visual D (a D DLL), I set VS (devenv.exe, a mixed C++/C# 
app) as the program to debug in the project debugger options. This 
ensures a native debugger engine is used and is the simplest way to use 
the mago debugger. With the "Mixed mode" engine, you can debug both C# 
and D/C++ in the same session.


More information about the Digitalmars-d-learn mailing list