Re: Windbg 调试 C# 与 C++,老雷来帮忙看看吧。

WinDbg

Windbg 调试 C# 与 C++,老雷来帮忙看看吧。


跨界运行 2013-10-18, 08:55 上午
一直以匿名状态看这个论坛好久了,也从这里学到了不少知识,先谢谢老雷。

我遇到了一个用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呢?

Re: Windbg 调试 C# 与 C++,老雷来帮忙看看吧。


格蠹老雷 2013-10-18, 12:08 下午

建议还是加载与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...

Re: Windbg 调试 C# 与 C++,老雷来帮忙看看吧。


跨界运行 2013-10-18, 14:26 下午
比较奇怪,

我用 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

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

Re: Windbg 调试 C# 与 C++,老雷来帮忙看看吧。


跨界运行 2013-10-18, 15:13 下午
应该是我的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)

Re: Windbg 调试 C# 与 C++,老雷来帮忙看看吧。


格蠹老雷 2013-10-19, 00:12 上午

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

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

Powered by Community Server Powered by CnForums.Net