【问题标题】:Set breakpoint at overloaded function which name includes space in WinDBG在名称包含 WinDBG 中空格的重载函数处设置断点
【发布时间】:2016-01-25 06:15:26
【问题描述】:

现在我使用 WinDBG 调试程序。这个程序调用'operator new'函数。

使用符号,这个函数调用可以通过符号名访问,“MSVCR90!operator new”。

但是这个函数名有空格('')并且被两种类型重载。 MSVCR90!operator new (unsigned int) & MSVCR90!operator new *(unsigned int, int, char , int)

因此,我不能轻易地在这个函数上设置断点。我输入了以下方法,但我输入的所有内容都失败了。

0:008> bp @!"MSVCR90!operator new"
Matched: 74b00939          MSVCR90!operator new (unsigned int, int, char *, int)
Matched: 74af3e99          MSVCR90!operator new (unsigned int)
Ambiguous symbol error at '@!"MSVCR90!operator new"'
          ^ Extra character error in 'bp @!"MSVCR90!operator new"'

0:008> bp @!"MSVCR90!operator new (unsigned int)"
Couldn't resolve error at '@!"MSVCR90!operator new (unsigned int)"'
          ^ Extra character error in 'bp @!"MSVCR90!operator new (unsigned int)"'

我终于在'operator new'处设置了断点,但我使用了偏移量。

还有'MSVCR90!operator new (unsigned int)'吗?

【问题讨论】:

    标签: c++ debugging windbg


    【解决方案1】:

    当您使用符号名称时,WinDbg 将查找该符号并使用关联的地址。在上面的输出中,它显示了两个匹配项及其地址:74b00939 和 74af3e99。因此,只需选择给定的适当地址。假设您想要 MSVCR90!operator new (unsigned int),只需使用 bp 74af3e99

    关于符号解析,也可以使用 x 命令。例如:

    x MSVCR90!operator*new
    

    这将输出相同的匹配列表及其地址。

    【讨论】:

    • "just use bp 74af3e99" - 恕我直言,自从他说“我使用了偏移量”以来,OP 已经这样做了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多