2013-04-08 96 views
0

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

UPDATE

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

+2

我怀疑VS调试器会让你调试该代码。 – 2013-04-08 20:18:32

+0

@David Heffernan我应该使用WinDBG吗? – Max 2013-04-08 20:20:22

+0

也许,我不知道什么是最好的。 – 2013-04-08 20:29:23

回答

0

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

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

编辑

如果你的意思是,你要调试的实际CLR代码,不会引导与该DLL的实际本地通话,那么答案是没有 - 我不认为这是可能的。

+0

[我不认为这是他正在寻找](http://stackoverflow.com/questions/15888158/debugging-dllimport-code#comment22624642_15888158)。 – 2013-04-08 22:25:50