.NET CF命令行调试器MDbg入门(四) Attaching to Processes

Pycharm等调用dll时使用VS调试:附加到进程(Attach to Process) 前言 Python与C语言联合编程时,使用python调用dll库是很常见的情况,因为可以通过将常用函数或复杂函数封装成C语言提高效率,但如何调试是一个问题。 本文环境:VS 2013 Ultimate + Pycharm 2017 Community 正文 1.编写dll文件 新建VS项目,选择“Win32控制台应用程序”或“Win32项目”(甚至“空项目”)都可以,在向导中选择“DL... 阅读详情
 .NET CF命令行调试器MDbg入门(四) Attaching to Processes
老狼的话:David Kline是.NET CF团队一位非常优秀的开发者,看到他这个系列文章已经很久了,一直没空翻译。今天用下班后的时间翻译出来,也是希望有个督促,能让这个系列文章让更多朋友认识。原文地址:
http://blogs.msdn.com/davidklinems/archive/2006/08/25/724718.aspx

能够attach到一个运行中的进程中是调试器非常强大的一个功能。这项功能对于调试运行中的应用程序特别便利。对于CorDbg来说,当调试.NET CF程序时,并不支持正式的attach process。使用.NET CF MDbg调试器扩展(2.0版本SP1),支持在命令行中附加调试器到一个运行中的程序中。

注意:在我们附加MDbg到我们的应用程序(Visual Studio 2005 WebCrawler sample)之前,我们必须让设备支持attach to process。这个步骤要在我们想调试的应用程序启动之前完成。

当调试一个.NET CF应用程序时,第一步是使用MDbg加载.NET Compact Framework 扩展(mdbgnetcf.dll)。一旦扩展被加载,我们可以创建一个连接到我们的目标设备。这些在本系列的第一部分有描述。

下一步是启动我们希望调试的应用程序。应用程序可以通过在设备中点击它们的图标来启动,或者可以通过MDbg的cp[roc]命令(创建进程)。因为我们已经设置了调试器环境,所以我通过cp[roc]命令来启动进程。关于cp[roc]和其他进程控制命令的更多信息可以查看本系列的第三部分

mdbg> cp "/program files/webcrawler.exe"

我们的应用程序现在已经在设备中启动了。为了attach,我们需要知道应用程序的进程ID。

mdbg> pro
Active processes on current machine:
<< additional processes removed for clarity >>
(PID: 0x6de24e9a) webcrawler.exe

通过输入,我们可以看到WebCrawler的进程ID是0x6de24e9a,我们将使用这个值来attach我们的应用程序。

mdbg> a 0x6de24e9a

在attach之后,我们将不会返回到mdbg>的提示符,为了能够开始调试我们的应用程序,我们需要使用Ctrl+C来打断调试器。

<Ctrl+C>
STOP AsyncStop
[p#:0, t#:no active thread] mdbg>

现在我们可以调试WebCrawler了。现在让我们在Crawler类的Crawl方法里设置一个断点。

在CorDbg中设置断点是具有挑战性的事情,为了能够成功的设置断点,我们必须输入精确的方法名称(区分大小写)。在MDbg中这将变得简单。使用x命令,我们可以在WebCrawler模块中搜索我们感兴趣的方法。

[p#:0, t#:no active thread] mdbg> x WebCrawler
~0. Microsoft.Samples.NetCF.Crawler.add_CurrentPageEvent(value)
~1. Microsoft.Samples.NetCF.Crawler.remove_CurrentPageEvent(value)
~2. Microsoft.Samples.NetCF.Crawler.add_PageFoundEvent(value)
~3. Microsoft.Samples.NetCF.Crawler.remove_PageFoundEvent(value)
~4. Microsoft.Samples.NetCF.Crawler.add_CrawlFinishedEvent(value)
~5. Microsoft.Samples.NetCF.Crawler.remove_CrawlFinishedEvent(value)
~6. Microsoft.Samples.NetCF.Crawler..ctor(startingPage,noProxy)
~7. Microsoft.Samples.NetCF.Crawler.Start()
~8. Microsoft.Samples.NetCF.Crawler.Stop()
~9. Microsoft.Samples.NetCF.Crawler.PageIsHtml(pageAddress,status)
~10. Microsoft.Samples.NetCF.Crawler.GetPageData(pageUri,pageData)
~11. Microsoft.Samples.NetCF.Crawler.GetPageLinks(pageUri,pageBody,tag,attribute,links)
~12. Microsoft.Samples.NetCF.Crawler.Crawl()
~13. Microsoft.Samples.NetCF.Crawler.CurrentPageEventHandler..ctor(object,method)
~14. Microsoft.Samples.NetCF.Crawler.CurrentPageEventHandler.Invoke(sender,e)
~15. Microsoft.Samples.NetCF.Crawler.CurrentPageEventHandler.BeginInvoke(sender,e,callback,object)
~16. Microsoft.Samples.NetCF.Crawler.CurrentPageEventHandler.EndInvoke(result)
~17. Microsoft.Samples.NetCF.CurrentPageEventArgs.get_PageAddress()
~18. Microsoft.Samples.NetCF.CurrentPageEventArgs..ctor(page)
~19. Microsoft.Samples.NetCF.LinkInfo.get_LinkPath()
~20. Microsoft.Samples.NetCF.LinkInfo.get_StatusCode()
~21. Microsoft.Samples.NetCF.LinkInfo.set_StatusCode(value)
~22. Microsoft.Samples.NetCF.LinkInfo..ctor(path,status)
~23. Microsoft.Samples.NetCF.MainForm..ctor()
~24. Microsoft.Samples.NetCF.MainForm.Dispose(disposing)
~25. Microsoft.Samples.NetCF.MainForm.InitializeComponent()
~26. Microsoft.Samples.NetCF.MainForm.Main()
~27. Microsoft.Samples.NetCF.MainForm.startButton_Click(sender,e)
~28. Microsoft.Samples.NetCF.MainForm.HandleCurrentPageEvent(sender,e)
~29. Microsoft.Samples.NetCF.MainForm.HandlePageFoundEvent(sender,e)
~30. Microsoft.Samples.NetCF.MainForm.HandleCrawlFinishedEvent(sender,e)
~31. Microsoft.Samples.NetCF.MainForm.HandleActivityLightsEvent(unused,notused)
~32. Microsoft.Samples.NetCF.MainForm.CustomInvokeRequired()

在这个列表中,我们看到条目12是我们要找的方法。为了给Crawl方法设置一个断点,我们可以引用条目数。

[p#:0, t#:no active thread] mdbg> b ~12
Breakpoint #1 bound (:1!Microsoft.Samples.NetCF.Crawler::Crawl(+0))

当我们继续执行应用程序(并在WebCrawler应用程序中点击Start),我们将停止在Crawl方法开始的地方。

[p#:0, t#:no active thread] mdbg> g
STOP: Breakpoint 1 Hit
located at line 380 in Crawler.cs
[p#:0, t#:no active thread] mdbg>

Enjoy!
-- DK
基于Mdbg实现的C#脚本代码调试 基于Mdbg实现的C#脚本代码调试(编译,断点、单步调试)的简单IDE 立即下载

相关推荐

sscli_Shared Source CLI 2.0 (开发代号Rotor)

http://blog.csdn.net/atfield/article/details/1471465 Introduction Shared Source CLI 2.0 (开发代号Rotor) 是微软.NET Framework 2.0的Shared Source实现版本。Shared Source是微软推出的源代码共享计划,可以在一定限制的情况下获得/使用源代码,详情可以参考Microsoft Shared Source Initiative主页:http://www.microsoft.com/resources/sharedsource/。Rotor的代码可以在非商业行为的前提下可以自由修改和发布,只需保留License声明即可。Rotor包含了下面的内容: 1. CLI的运行时(CLR)的符合ECMA标准的实现 2. C# & Jscript编译器 3. .NET Framework中的部分工具,如ilasm, ildasm, cordbg, gacutil, sn等 4. Build工具,如Build, Binplace, NMake等 5. PAL (Platform Adaptation Layer),支持其他平台 6. 自动化回归测试 7. Samples 由此可见,Rotor是研究.NET Framework实现的最佳材料。 Rotor的全部源代码可以在微软的MSDN网站上下载:http://msdn.microsoft.com/net/sscli/ 下载后解压缩,可以看到如下的目录结构: 目录 内容 Binaries.x86*.rotor Build出来的可执行文件和Symbols。这个目录在Build之后才会出现 clr CLI和BCL(Base Class Library)的实现 csharp C#编译器的实现就在这里了 Docs 文档 Env Build时所需的一些文件 Fx 类库的实现 Jscript Jscript编译器的实现 Pal Platform Adaptation Layer的实现。PAL是Rotor对Windows和Unix的一些基本API的封装 Palrt Platform Adaptive Layer Runtime的实现。PAL中的和操作系统平台无关可重用的部分 prebuilt 存放着build所需的一些事先用工具生成好的文件 Samples Samples Tests Regression Test Suite Tools Build工具,包括binplace, build, cppmunge等 Vscommon 公共头文件,主要是微软内部使用的一些产品有关的公用的宏定义 总共大概有150MB左右。 本人先发在CSDN上做个备份。

.NET中Winform窗体应用程序的几个关于坐标的知识点

本文是我对一些Winform下常用的坐标知识点做一个总结。 一、关于坐标 在计算机中,左上角是原点,从左上角向右为X轴的正方向,从左上角向下为Y轴的正方向。坐标在.NET中通过Point结构表示,该结构有两个属性X与Y用于指定横纵坐标,并重载了+、-、+=、-=等运算符。 二、几个常...

1006

求助找不到指定的模块。 (异常来自 HRESULT:0x8007007E)

错误信息如下: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E) System.Windows.Forms 在 System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid) 在 System.Windows.Forms.AxHost.CreateWithoutLicense(Guid cls...

Ali_qunzheng的博客 2362

FormMain.Designer.cs

namespace ProductManager{    partial class FormMain    {                private System.ComponentModel.IContainer components = null;        protected override void Dispose(bool disposing)        {   

kingzhexian的专栏 592

蛙蛙推荐:一键定位CPU百分百问题

摘要:当一个.net应用在生产环境CPU突然居高不下,如何快速准确的定位问题所在,并且对实时业务影响最小化?如何不抓Dump也不用live debug就可以知道你的应用在做什么?如何确认你的应用是由于哪个线程的执行造成的CPU升高,该线程正在执行什么代码?分析:CPU升高的原因有很多, 1、有时候应用的负载大了,CPU自然会受业务请求的增加和增高; 2、有时候因为GC回收使用了过高的

蛙蛙池塘 3338

jinfo命令报错Error attaching to process

一、报错信息 1.在使用jdk自带命令的时候,如jinfo ,jmap等命令,报错信息如下 Attaching to process ID 8088, please wait... Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrac...

qq_35151346的博客 3971

Error attaching to process sun.jvm.hotspot.debugger.DebuggerException cannot open binary file

Error attaching to process sun.jvm.hotspot.debugger.DebuggerException cannot open binary file? 问题描述 使用 jinfo jmap 查看java进程时候出现以下错误: 出错描述:使用jinfo查看jvm参数时候报错 Error attaching to process sun.jvm.hotspot.debugger.DebuggerException cannot open binary file 出错原因:

weixin_42272869的博客 1万+

使用CorDbg进行托管调试

         Cordbg是和.Net Framework,以及Windows SDK一起ship的托管代码的调试工具,相对于VS来说,它是一个比较low-level的调试工具.         本文的主要目的,就是看看Cordbg如何来进行托管调试,然后演示下其功能,看看其和其它的托管调试工具,譬如MDBG和windbg+SOS有啥不同.         Mdbg

lbq1221119 1377

.net下的一些工具

ASP.NET IIS 注册工具(Aspnet_regiis.exe)允许管理员或安装程序更新 ASP.NET 应用程序的脚本映射,使其指向与该工具关联的 ASP.NET ISAPI 版本。也可以使用该工具执行其他 ASP.NET 配置操作。 注意: 在“%windir%/Microsoft.NET/Framework/v1.1.xxxx”中可以找到 Aspnet_regiis.exe,其中 xx

thundershi的专栏 1100

.NET CF命令行调试器MDbg入门(三) 进程控制

老狼的话:David Kline是.NET CF团队一位非常优秀的开发者,看到他这个系列文章已经很久了,一直没空翻译。今天用下班后的时间翻译出来,也是希望有个督促,能让这个系列文章让更多朋友认识。原文地址:http://blogs.msdn.com/davidklinems/archive/2006/08/11/695975.aspx在这个系列的前两篇文章中,我讨论了MDbg入门和使用设备模拟器

aawolf = new Mobile.MVP 4748

使用Mdbg.exe 调试.Net 程序

Windows SDK 里面的Mdbg.exe 是一个命令行的CLR调试工具,在没有VS的情况下,可以较为方便调试. 下面演示一下如何使用这个工具 调试 一个winform 应用程序:MemLeakProfileDemo.exe 调试的前提是 pdb文件在,如MemLeakProfileDemo.pdb 在exe目录下会自动加载. Sample code: Download nam...

weixin_30776545的博客 542

Attaching to process 29139 Could not attach to process.

docker container中gdb调试程序,报错: Attaching to process 29139 Could not attach to process. If your uid matches the uid of the target process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or t...

weixin_33670786的博客 2237

Error attaching to process: sun.jvm.hotspot.runtime.VMVersionMismatchException

[root@hadoop102 ~]# jmap -heap 9578 Attaching to process ID 9578, please wait... Error attaching to process: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.275-b01. Target VM is 25.211-b12 sun.jvm.hotspot.debugger.DebuggerExc

Knight 842

.NET CF命令行调试器MDbg入门()

.NET CF命令行调试器MDbg入门()认识MDbg.NET Compact Framework 2.0 SP1老狼的话:David Kline是.NET CF团队一位非常优秀的开发者,看到他这个系列文章已经很久了,一直没空翻译。今天用下班后的时间翻译出来,也是希望有个督促,能让这个系列文章让更多朋友认识。原文地址:http://blogs.msdn.com/davidklinems

aawolf = new Mobile.MVP 8218

jmap -heap [pid]运行报:Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException(不允许的操作)

运行环境:        系统:Ubuntu 18.04 LTS        JDK:1.8 操作: 命令行运行:~$ jmap -heap [pid号] 结果: 报错: Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException:不允许的操作 解决方法: 命令行运行:~$ echo ...

火火的博客 2万+

Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process

Ubuntu 系统 使用jinfo和jmap时出现以下错误: 解决方法:  方法1、 >echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope 该方法在下次重启前有效。  方法2、 永久有效方法  sudo vi /etc/sysctl.d/10-ptrace.conf  编辑下面这行:  kernel.yama.ptrac

wxa136的专栏 1万+
上一篇: MEDC上想看到的新技术
下一篇: 我在MEDC上的两门课
aawolf
博客等级 码龄26年 840粉丝 163原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值