Home > Mobile >  Visual Studio debugger not working for a DLL build from assembly source files?
Visual Studio debugger not working for a DLL build from assembly source files?

Time:08-22

I'm currently using masm in a C wrapper to develop a .dll so it can be used by other applications, notably a c# one in Visual Studio 2022

However developing this way has some big drawbacks. Visual Studio has all sorts of little niggles about getting MASM working such as building properly if a file is 'included' in the asm source. Such files also cannot have break points. This means I have to resort to one large file, which is getting very unwieldy.

Its like Microsoft have given up supporting MASM, unless there's some way to build a DLL that allows debugging?

Or is there some better way to develop x64 .dlls on Windows, if there's no easy fix for the Visual Studio debugging problem?

CodePudding user response:

Working example. I'm able to step through the c# code and into the assembly code. Directory for assembly based DLL is c:\xcadll.

xa.asm:

        includelib      msvcrtd
        includelib      oldnames        ;optional
        .data
        .data?
        .code
        public  DllMain
DllMain proc                            ;return true
        mov     rax, 1
        ret     0
DllMain endp
        include xb.asm
        end

xb.asm:

        public  Example
Example proc                            ;[rcx] = 0123456789abcdefh
        mov     rax, 0123456789abcdefh
        mov     [rcx],rax
        ret     0
Example endp
        end

Program.cs - used to call the debug version of the dll:

using System;
using System.Runtime.InteropServices;
namespace Program
{
    class Program
    {
    [DllImport("c:\\xcadll\\x64\\debug\\xcadll.dll")]
    static extern void Example(ulong[] data);

        static void Main(string[] args)
        {
            ulong[] data = new ulong[4] {0,0,0,0};
            Console.WriteLine("{0:X16}", data[0]);
            Example(data);
            Console.WriteLine("{0:X16}", data[0]);
            return;
        }
    }
}

Project settings for DLL build:

Create a .dll project for the assembly (or C or C ) code:

project properties: Debug | x64

properties for xa.asm:

General / Excluded From Build: No
Custom Build Tool / Command Line: ml64 /c /Zi /Fo$(OutDir)\xa.obj xa.asm
Custom Build Tool / Outputs: $(OutDir)\xa.obj

Project settings for C# build:

Create a C# project

project properties: Debug | x64

As shown in the example code above, the C# program needs to import the debug version of the DLL.

  • Related