是否可以查看/调试C#编译器为具有DllImport属性的方法生成的代码?我尝试进入VS调试器中使用DllImport属性定义的方法,但它不允许我这样做。在反汇编视图中,我可以看到对某个特定地址的调用指令,但是当我按下F11键(步骤)时,它只是跨出一步。我在项目属性中选中了“启用本机代码调试”复选框。
更新
如果我正确理解,编译器会在看到附加到方法的DllImportAttribute时执行一些操作。我在DllImportAttribute类文档中找不到任何东西。DllImportAttribute类的源代码也只有一个非常基本的类定义。在调试器中,当调用外部函数时,我可以看到一个call FFA0C0C8程序集指令,当我进入它时,它会立即移动到导入的函数体,但是导入的函数有一个与FFA0C0C8不同的地址。我无法将反汇编视图更改为此地址。看起来所有的dll加载逻辑都在这个函数中,调试器跳过了这个函数。我想知道这是由编译器生成的库函数还是函数?
发布于 2013-04-08 22:07:36
如果启用本机调试,并且具有dll的符号和源,则可以调试P/Invoke调用。
如果您试图进入某个Windows dll中的P/Invoke调用,则可能会失败,因为您没有dll的源代码。
编辑
如果您的意思是要调试执行编组和对dll的实际本机调用的实际CLR代码,那么答案是否定的--我认为这是不可能的。
https://stackoverflow.com/questions/15888158
复制相似问题