【问题标题】:How to set breakpoint by function name inside anonymous namespace in Visual Studio?如何在 Visual Studio 的匿名命名空间内按函数名设置断点?
【发布时间】:2011-09-12 12:47:21
【问题描述】:

我有以下代码:

namespace
{
    void Foo()
    {
    }
}

namespace Bar
{
    void Foo()
    {
    }
}

int main()
{
    Foo();
    Bar::Foo();

    return 0;
}

我想按名称在匿名命名空间内的Foo() 上放置断点(Ctrl+B 键绑定)。我可以为命名空间Bar 内的函数执行此操作,而名称Bar::Foo 没有问题。我为匿名命名空间尝试了anonymous namespace::Foo,但 VS 无法解析这个名称,我猜是因为名称中的空格字符。我也尝试使用不同的引号,但没有成功。是否可以设置这个断点?

【问题讨论】:

  • 不知道,但是您可以尝试在函数内部定义一个类型并使用typeid(T).name 输出其名称(您需要包含<typeinfo> 标头),并且可能在那里您会看到函数如何应该被提及。
  • 在gdb中,设置断点的命令是:b (anonymous namespace)::xxClass::xxFunction(xxType&..)。我不知道它是否适用于 VisualStudio。

标签: c++ visual-studio breakpoints


【解决方案1】:

我很久以前遇到过类似的问题(Debugging data in 'anynomous namespaces' (C++))。我想查看未命名命名空间中数据成员的值,但无法完成。

最后,有人指点我http://msdn.microsoft.com/en-us/library/0888kc6a%28VS.80%29.aspx。也许你可以得到修饰的函数名并在其上放置一个断点。

【讨论】:

【解决方案2】:

看起来 Visual Studio 无法在匿名命名空间内按函数名称设置断点。连 WinDbg 都做不到。

如果你有源码,你可以逐行设置断点。

【讨论】:

  • 可以通过修饰函数名来实现。在另一个答案中查看我的 cmets。
  • 是的,它奏效了。我将断点设置为 ?Foo@?A0xac6cc1fe@@YAXXZ。我以前试过这个,但我先错过了?符号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
相关资源
最近更新 更多