Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

WinDbg

帖子发起人: 跨界运行   发起时间: 2013-10-18 08:55 上午   回复: 4

Print Search
帖子排序:    
   2013-10-18, 08:55 上午
wangxingge 离线,最后访问时间: 2013/10/18 0:49:03 跨界运行

发帖数前200位
注册: 2013-10-18
发 贴: 5
Smile [:)] Windbg 调试 C# 与 C++,老雷来帮忙看看吧。
Reply Quote
一直以匿名状态看这个论坛好久了,也从这里学到了不少知识,先谢谢老雷。

我遇到了一个用windbg 打断点打不上的问题。

下面描述一下环境。

C# 写的一个windows 服务。用LoadLibraryEx 的方式加载了一个C++的  DLL,然后这个 C++的DLL里使用了一个C#写的COM组件。

我用的是.NET 4.0 的SOS.dll 和 V4 的SOSEX.dll 来支持CLR的调试,C#和C++的断点可以打上,可是C++里调用的COM 里的断点打不上,不知道是为什么。

老雷有没有什么想法??

但是我用VS 来Attach Process 是可以成功打断点的,但是我选的是Native  和 .NET 2.0的。如果用.NET 4.0 也打不上。

是不是我需要用windbg 也load .net 2.0 的sos呢?

IP 地址: 已记录   报告
   2013-10-18, 12:08 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: Windbg 调试 C# 与 C++,老雷来帮忙看看吧。
Reply Quote

建议还是加载与C#写的COM组件相同版本的SOS,然后找到方法表,可以!name2ee, !dumpmt, 找到方法描述后,!bpmd -md xxxx

 比如:

0:000> !name2ee CliHello CliHello.CliHello.Main

Module: 00a72c24 (CliHello.exe)

Token: 0x06000001

MethodDesc: 00a72fe8

Name: CliHello.CliHello.Main(System.String[])

Not JITTED yet. Use !bpmd -md 00a72fe8 to break on run.

0:000> !bpmd -md 00a72fe8

MethodDesc = 00a72fe8

Adding pending breakpoints...


IP 地址: 已记录   报告
   2013-10-18, 14:26 下午
wangxingge 离线,最后访问时间: 2013/10/18 0:49:03 跨界运行

发帖数前200位
注册: 2013-10-18
发 贴: 5
Re: Windbg 调试 C# 与 C++,老雷来帮忙看看吧。
Reply Quote
比较奇怪,

我用 LM列module的时候, 被 C++ 创建的 COM组件显示被Load 了,但是没有Symbol

656c0000 656cc000   ECConnectionManager C (no symbols)  

然后我尝试 !Name2ee 
0:078> !name2ee ECConnectionManager!HUS.VMS.ECConnectionManager.ConnectionManager.ListenTo
0:078> !name2ee ECConnectionManager!*.ListenTo
0:078> !name2ee *!*.ListenTo
0:078> !name2ee ECConnectionManager!HUS.VMS.ECConnectionManager.IConnectionManagerProvider.ListenTo

都没有任何返回。请问我下一步应该怎么办?

IP 地址: 已记录   报告
   2013-10-18, 15:13 下午
wangxingge 离线,最后访问时间: 2013/10/18 0:49:03 跨界运行

发帖数前200位
注册: 2013-10-18
发 贴: 5
Re: Windbg 调试 C# 与 C++,老雷来帮忙看看吧。
Reply Quote
应该是我的Symbol 有问题,我又重新搞了一次,Symbol 被加载了。

但是用!name2ee 还是找不到对应的数据。

0:009> !name2ee ECConnectionManager!HUS.VMS.ECConnectionManager.IConnectionManagerProvider.ListenTo
0:009> !name2ee ECConnectionManager!HUS.VMS.ECConnectionManager.IConnectionManagerProvider
0:009> !name2ee ECConnectionManager!IConnectionManagerProvider
0:009> !name2ee ECConnectionManager!IConnectionManagerProvider.ListenTo

上面是我尝试!name2ee 的结果


下面是我用x 搜索的结果
0:009> x ECConnectionManager!HUS.VMS.ECConnectionManager.IConnectionManagerProvider.ListenTo
0:009> x *!HUS.VMS.ECConnectionManager.IConnectionManagerProvider.ListenTo
0:009> x *!ListenTo
<MSIL:657c042f> TCPAuditorProxy!ListenTo (void)
<MSIL:657c0380> TCPAuditorProxy!ListenTo (void)
<MSIL:657c1806> TCPAuditorProxy!ListenTo (void)
<MSIL:657c17d7> TCPAuditorProxy!ListenTo (void)
<MSIL:657e04df> ECConnectionManager!ListenTo (void)
<MSIL:657e094c> ECConnectionManager!ListenTo (void)
<MSIL:657e0928> ECConnectionManager!ListenTo (void)

IP 地址: 已记录   报告
   2013-10-19, 00:12 上午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: Windbg 调试 C# 与 C++,老雷来帮忙看看吧。
Reply Quote

看起来是与实际产品相关的问题,不建议在这样的公开论坛讨论,和老板商量一下,You have a strong reason to attend “庐山软件训练营”

http://advdbg.org/forums/6056/ShowPost.aspx


IP 地址: 已记录   报告
高端调试 » 软件调试 » WinDbg » Re: Windbg 调试 C# 与 C++,老雷来帮忙看看吧。

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.