调试Dllimport代码

时间:2013-04-08 20:17:20

标签: c# dll native

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

更新

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

1 个答案:

答案 0 :(得分:0)

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

如果你试图进入某个Windows dll的P / Invoke调用,那么你可能会失败,因为你没有dll的源代码。

修改

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