[原]Bug Report,已提交给微软。平台调用调试时,无法对非托管函数进行单步的错误...

详细描述:

首先对非托管函数进行声明:

[DllImport("NativeLib.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

private extern static void TestStringArgumentsFixLength(string inString, StringBuilder outString, int bufferSize);

 

然后再选中“Enable unmanaged code debugging

 

 

编写如下代码进行测试:

private static void TestStringArgumentsFixLength()

        {

            string inString = "This is a input string.";

 

            int bufferSize = inString.Length;

            StringBuilder sb = new StringBuilder(bufferSize);

 

            TestStringArgumentsFixLength(inString, sb, bufferSize + 1);

 

            Console.WriteLine("Original: {0}", inString);

            Console.WriteLine("Copied: {0}", sb.ToString());

        }

 

在红色代码行打断点,按F11可以单步进非托管函数。

 

但是如果修改成:

private static void TestStringArgumentsFixLength()

        {

            string inString = "This is a input string.";

 

            int bufferSize = inString.Length;

            StringBuilder sb = new StringBuilder(bufferSize);

 

            // 如果上面函数调用的最后一个参数用StringBuilder对象的属性指定。

// 虽然运行结果正确,但调试器

            // 将不能单步执行进非托管代码中。这有可能是.NET Framework的小BUG

            TestStringArgumentsFixLength(inString, sb, sb.Capacity + 1);

 

            Console.WriteLine("Original: {0}", inString);

            Console.WriteLine("Copied: {0}", sb.ToString());

        }

 

在红色代码行打断点,按F11无论如何,都无法单步进非托管函数。

 

 

测试环境:

Windows Server 2008

Windows Vista Enterprise

Windows XP SP2

 

开发工具:

Microsoft Visual Studio 2005

Version 8.0.50727.42  (RTM.050727-4200)

Microsoft .NET Framework

Version 2.0.50727 SP1

 

 

需要源代码自己进行尝试的朋友请下载:

源代码


 

转载于:https://www.cnblogs.com/huangjizhou/archive/2008/07/30/1256337.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值