none
vs中调试时,如何F11进入extern标识的方法的内部?? RRS feed

答案

  • InternalCompareString的声明贴一下,另外,你有InternalCompareString所在库的debug版本的dll和代码吗?
    • 已标记为答案 xzzyyx8 2016年2月8日 14:56
    2016年1月10日 22:08

全部回复

  • 如果你说的是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被背选中。

    2016年1月8日 4:53
  • 您好,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时,依然无法进入内部???

    2016年1月8日 15:07
  • InternalCompareString的声明贴一下,另外,你有InternalCompareString所在库的debug版本的dll和代码吗?
    • 已标记为答案 xzzyyx8 2016年2月8日 14:56
    2016年1月10日 22:08