【发布时间】:2013-05-14 12:57:44
【问题描述】:
我正在尝试使用 WINDBG 调试在某些应用程序 (Autodesk Revit) 中加载的 C++/CLI 模块。问题是未命中非托管类方法中设置的断点。我有这门课:
class NativeGeometryShape {
public :
NativeGeometryShape()
: width_(10), height_(12)
{}
int GetArea() const;
private :
int width_;
int height_;
};
检查符号会得到以下信息:
0:000> x addon_revit2014!Native*
<MSIL:58bd350c > addon_revit2014!NativeGeometryShape::GetArea (void)
<MSIL:58bd1264 > addon_revit2014!NativeGeometryShape::NativeGeometryShape (void)
58bd3500 addon_revit2014!NativeGeometryShape::GetArea (<no parameter info>)
58bd3520 addon_revit2014!NativeGeometryShape::GetArea (<no parameter info>)
58bd1258 addon_revit2014!NativeGeometryShape::NativeGeometryShape (<no parameter info>)
所以我使用 bm 命令设置一些断点:
0:000> bm addon_revit2014!Native*
1: <MSIL:58bd350c > @!"addon_revit2014!NativeGeometryShape::GetArea"
2: <MSIL:58bd1264 > @!"addon_revit2014!NativeGeometryShape::NativeGeometryShape"
3: 58bd3500 @!"addon_revit2014!NativeGeometryShape::GetArea"
4: 58bd3520 @!"addon_revit2014!NativeGeometryShape::GetArea"
5: 58bd1258 @!"addon_revit2014!NativeGeometryShape::NativeGeometryShape"
然而,这些断点永远不会被命中,即使类的对象被实例化并且成员函数被调用。 有什么想法吗?
【问题讨论】:
-
我从来没有调试过 c++ cli,但是,我的直觉告诉我你在 MSIL 上设置了断点,它还没有被 jitted。你可以试试sos的!bpmd设置断点
-
另一个可能的解决方法是将非托管类放入
#pragma unmanaged