积极答复者
vs中调试时,如何F11进入extern标识的方法的内部??

问题
答案
全部回复
-
如果你说的是DllImport引入的extern,那么需要:
1. 在项目属性的debug页面中,吧Enable native code debugging,选择。
2. C/C++的dll是debug编译,并且相应pdb文件在同一个目录下
执行到 调用extern函数的地方, 按F11的时候会要求指定源代码文件位置。
另外一种方式是,在Visual studio 中c/C++的dll的工程中,找到要调试的函数,设置断点;然后运行C#程序;在Visual studio中执行"Attach to Process",在选择 Process的时候,要确保Native被背选中。
-
您好,Enable native code debugging后,按F11依然没有进入
Thread.CurrentThread.CurrentCulture.CompareInfo.Compare(a, 0, 1, b, 0, 2, CompareOptions.None);
CompareInfo.Compare定义:
public unsafe virtual int Compare(String string1, int offset1, int length1, String string2, int offset2, int length2, CompareOptions options)
{
if (options == CompareOptions.OrdinalIgnoreCase)
{
int result = String.Compare(string1, offset1, string2, offset2, length1<length2 ? length1 : length2, StringComparison.OrdinalIgnoreCase);
if ((length1 != length2) && result == 0)
return (length1 > length2? 1: -1);
return (result);
}
// Verify inputs
if (length1 < 0 || length2 < 0)
{
throw new ArgumentOutOfRangeException((length1 < 0) ? "length1" : "length2", Environment.GetResourceString("ArgumentOutOfRange_NeedPosNum"));
}
if (offset1 < 0 || offset2 < 0)
{
throw new ArgumentOutOfRangeException((offset1 < 0) ? "offset1" : "offset2", Environment.GetResourceString("ArgumentOutOfRange_NeedPosNum"));
}
if (offset1 > (string1 == null ? 0 : string1.Length) - length1)
{
throw new ArgumentOutOfRangeException("string1", Environment.GetResourceString("ArgumentOutOfRange_OffsetLength"));
}
if (offset2 > (string2 == null ? 0 : string2.Length) - length2)
{
throw new ArgumentOutOfRangeException("string2", Environment.GetResourceString("ArgumentOutOfRange_OffsetLength"));
}
if ((options & CompareOptions.Ordinal) != 0)
{
if (options != CompareOptions.Ordinal)
{
throw new ArgumentException(Environment.GetResourceString("Argument_CompareOptionOrdinal"),
"options");
}
}
else if ((options & ValidCompareMaskOffFlags) != 0)
{
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidFlag"), "options");
}
//
// Check for the null case.
//
if (string1 == null)
{
if (string2 == null)
{
return (0);
}
return (-1);
}
if (string2 == null)
{
return (1);
}
if (options == CompareOptions.Ordinal)
{
return CompareOrdinal(string1, offset1, length1,
string2, offset2, length2);
}
return InternalCompareString(this.m_dataHandle, this.m_handleOrigin, this.m_sortName,
string1, offset1, length1,
string2, offset2, length2,
GetNativeCompareFlags(options));
}方法结尾的代码:return InternalCompareString(this.m_dataHandle, this.m_handleOrigin, this.m_sortName,
string1, offset1, length1,
string2, offset2, length2,
GetNativeCompareFlags(options));中的“ InternalCompareString”方法为extern声明的,F11时,依然无法进入内部???