在名称包含 WinDBG 中的空格的重载函数处设置断点
Set breakpoint at overloaded function which name includes space in WinDBG
现在我使用 WinDBG 调试一个程序。该程序调用"运算符新"函数。
使用符号,可以通过符号名称"MSVCR90!运算符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)"'
我最终将断点设置为"运算符新",但我使用了偏移量。
无论如何都有"MSVCR90!运算符新(无符号整数)"吗?
使用符号名称时,WinDbg 将查找该符号并使用关联的地址。在上面的输出中,它显示了两个匹配项及其地址:74b00939 和 74af3e99。因此,只需选择给定的适当地址即可。假设你想要MSVCR90!运算符new(无符号int),只需使用bp 74af3e99
。
关于符号解析,您也可以使用 x 命令。例如:
x MSVCR90!operator*new
这将输出相同的匹配列表及其地址。
相关文章:
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- c++:可变模板和函数重载
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 解决模板成员函数重载
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 推断模板化函数中的函数重载
- C++复制函数重载导致"must be a nonstatic member function"错误
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 可变参数泛型 lambda 和函数重载
- C++中的函数重载和继承
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- C/C++ 可变参数宏函数重载
- 将基类的成员函数重载到其他派生类C++
- C++ 函数重载匹配
- C++函数重载,具体步骤是什么
- C++:使用 param pack 显式调用函数重载
- 隐式生成的函数重载用于右值参数?
- 使用函数重载输入运算符
- 运算符重载函数上的函数重载