【问题标题】:WinDBG debugging a C++ /CLI moduleWinDBG 调试 C++ /CLI 模块
【发布时间】: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

标签: debugging c++-cli windbg


【解决方案1】:

尝试在成员上设置访问断点,并查看它们何时被访问,以及从哪个函数访问(ba r1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2018-01-01
    相关资源
    最近更新 更多