惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
H
Help Net Security
小众软件
小众软件
N
Netflix TechBlog - Medium
C
Check Point Blog
量子位
Last Week in AI
Last Week in AI
GbyAI
GbyAI
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
博客园 - 聂微东
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
D
DataBreaches.Net
Project Zero
Project Zero
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
Security Latest
Security Latest
Cisco Talos Blog
Cisco Talos Blog
Recorded Future
Recorded Future
I
Intezer
L
Lohrmann on Cybersecurity
Cyberwarzone
Cyberwarzone
博客园_首页
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog
P
Palo Alto Networks Blog
V
V2EX
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
The Exploit Database - CXSecurity.com
The Hacker News
The Hacker News
Blog — PlanetScale
Blog — PlanetScale
G
GRAHAM CLULEY
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
The Register - Security
The Register - Security
L
LINUX DO - 热门话题
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
F
Full Disclosure
博客园 - 司徒正美
Recent Announcements
Recent Announcements
IT之家
IT之家
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Attack and Defense Labs
Attack and Defense Labs
Cloudbric
Cloudbric
Help Net Security
Help Net Security
The Last Watchdog
The Last Watchdog

博客园 - 同洲共际海让路

国内首本全面深入介绍.NET互操作技术(P/Invoke『或PInvoke,平台调用』,C++ Interop『C++/CLI』,COM Interop)的参考书籍 博客园开发者征途系列图书——《你必须知道的.NET》 一站式查询八字、五行、星座、五格——美名腾人名解析 一句话让别人立马记住你的名字——美名腾智能人名解析 何谓智能起名? 美名腾智能起名系统有了新界面 千名万名,到美名腾来试金。【写在美名腾起名系统Beta版成功发布】 [原]动态平台调用 part 3 (Final) [原]动态平台调用 part 2 [原]动态平台调用 part 1 JavaScript Debugging and Intellisense, JavaScript obfuscator etc from VS 2005 to VS 2008 (VS2005到2008的变迁,JavaScript调试,智能感知/智能感应功能,JavaScript的混淆、压缩等功能的海变桑田) 终于见到了传说中的Scott Guthrie 如何为Team Foundation Server的Daily Build添加自定义操作 客户端安装Team Explorer 2005后,使用时出现package load failure错误的修正 WCF Part 7 : Bindings WCF Part 6 : Address 推荐一个好玩的好东西,ILMerge,微软出的,合并多个.NET组件成一个 WCF Part 5 : Consuming the service [译]WCF Part 4 : Make your service visible through metadata
[原]Bug Report,已提交给微软。平台调用调试时,无法对非托管函数进行单步的错误
同洲共际海让路 · 2008-07-30 · via 博客园 - 同洲共际海让路

详细描述:

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

[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

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

源代码