问题是:
我有一个表单项目,它实例化了一个在单独的dll项目中定义的类。当运行使用这个dll的表单应用程序时,一切都运行得很好,
然而
,当我设置断点以检查在dll项目中定义的类型的对象时,我的监视窗口中会出现错误。
一些重要的事情需要知道:
-
dll项目使用不安全和非托管代码。
-
此问题在调用任何不安全函数之前出现。
-
已启用非托管代码调试。
-
我知道这些符号是为dll加载的。
-
我知道调试器加载的dll版本与应用程序使用的相同。
-
我已清理并删除输出目录,然后重新生成。
-
他们正在使用相同的.NET版本。
例子:
如果我把这个加到我的手表窗口
MyDllType.SomeProperty
我会看到这个(仅在观察窗口中):
'MyDllType.SomeProperty' threw an exception of type 'System.ArgumentException' Message: "Cannot find the method on the object instance."
然而
,如果我要补充
Debug.Writeline(MyDllType.SomeProperty);
在同一点上,我将不会得到任何异常,它将正确地显示在输出控制台。
此外:
如果我要创建一个在dll项目中定义的结构类型列表并将其添加到监视窗口中,我将看到以下内容(仅在监视窗口中):
// My Dll Project
public struct MyDllStruct
{
public int x;
public int y;
public int z;
}
// Snippet from a function block in forms project
List<MyDllStruct> structList = new List<MyDllStruct>();
// Add a bunch of stuff to the list
// <-- Insert a breakpoint here
}
当我打破和添加
structList
到了监视窗口我得到:
Unable to evaluate the expression. Operation not supported. Unknown error: 0x8004f0ed.
然而
,我要再次补充
Debug.Writeline(structList.Count);
在同一点上,我将不会得到任何异常,它的计数将正确显示在输出控制台。
完整示例
:
// My Dll Project
public class MyDllType
{
public MyDLLType()
{
this.someProperty = 123456;
}
private int someProperty;
public int SomeProperty
{
get{ return this.someProperty; }
set{ this.someProperty = value; }
}
}
public struct MyDllStruct
{
public int x;
public int y;
public int z;
}
// My Forms Project
public class SomeController
{
public SomeController()
{
this.dllType = new DllType();
List<MyDllStruct> structList = new List<MyDllStruct>();
// <-- For example, I get both aformentioned problems if i break here (or anywhere else these objects have been instantiated)
}
private MyDllType dllType;
}
正如您可能想象的那样,这使得调试我的应用程序变得非常困难:)非常感谢您的帮助。