C# 调试Dllimport代码

C# 调试Dllimport代码,c#,dll,native,C#,Dll,Native,是否可以查看/调试C#编译器为具有DllImport属性的方法生成的代码?我尝试在VS调试器中使用DllImport属性定义一个方法,但它不允许我这样做。在反汇编视图中,我可以看到对特定地址的调用指令,但当我按F11键(单步执行)时,它只是跳过它。我在项目属性中选中了“启用本机代码调试”复选框 更新 如果我理解正确,编译器在看到附加到方法的DllImportAttribute时会执行一些操作。我在DllImportAttribute类文档中找不到任何内容。DllImportAttribute类的

是否可以查看/调试C#编译器为具有DllImport属性的方法生成的代码?我尝试在VS调试器中使用DllImport属性定义一个方法,但它不允许我这样做。在反汇编视图中,我可以看到对特定地址的调用指令,但当我按F11键(单步执行)时,它只是跳过它。我在项目属性中选中了“启用本机代码调试”复选框

更新


如果我理解正确,编译器在看到附加到方法的
DllImportAttribute
时会执行一些操作。我在
DllImportAttribute
类文档中找不到任何内容。
DllImportAttribute
类的源代码也只有一个非常基本的类定义。在调试器中,当调用外部函数时,我可以看到
call ffa0c8
汇编指令,当我进入该指令时,它会立即移动到导入的函数体,但导入的函数的地址与ffa0c8不同。我无法将反汇编视图更改为此地址。看起来所有的dll加载逻辑都在这个函数中,调试器会跳过这个函数。我想知道这是库函数还是编译器生成的函数?

如果启用本机调试,并且您有dll的符号和源代码,则可以调试p/Invoke调用

如果您试图单步执行对某个Windows dll的p/Invoke调用,则可能会失败,因为您没有dll的源代码

编辑


如果您的意思是要调试执行编组的实际CLR代码和对dll的实际本机调用,那么答案是否定的-我认为这是不可能的。

我怀疑VS调试器是否允许您调试该代码。@David Heffernan我应该使用WinDBG吗?也许,我不知道什么是最好的。您需要用于要调试的DLL的符号。否则,即使在WinDbg中,您也只能使用“反汇编”视图。您是否有要作为解决方案一部分的DLL项目?。