Visual Studio调试器不适用于从程序集源文件生成的DLL



我目前正在C++包装器中使用masm来开发.dll,以便其他应用程序可以使用它,尤其是Visual Studio 2022 中的C#应用程序

然而,以这种方式开发也有一些很大的缺点。Visual Studio在让MASM正常工作方面有很多小麻烦,比如如果asm源中"包含"了一个文件,则可以正确构建。这样的文件也不能有断点。这意味着我必须使用一个大文件,这变得非常笨拙。

它就像微软已经放弃了对MASM的支持,除非有办法构建一个允许调试的DLL?

或者,如果Visual Studio调试问题没有简单的解决方案,是否有更好的方法在Windows上开发x64.dll?

工作示例。我能够逐步完成c代码并进入汇编代码。基于程序集的DLL的目录为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-用于调用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;
}
}
}

DLL构建的项目设置:

为程序集(或C或C++(代码创建.dll项目:

project properties: Debug | x64

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

C#版本的项目设置:

创建C#项目

project properties: Debug | x64

如上面的示例代码所示,C#程序需要导入DLL的调试版本。

最新更新