0

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

更新

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

4

1 回答 1

1

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

如果您尝试单步执行对某些 Windows dll 的 P/Invoke 调用,那么您可能会失败,因为您没有该 dll 的源代码。

编辑

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

于 2013-04-08T22:07:36.227 回答