在Windowsdebugging器CDB中parsing符号

我试图通过Windowsdebugging器CDB在我附加的进程中调用C ++函数。

该function被定义为:

void LockerImpl<IsForMMAPV1>::dump() const { ... } 

CDB中的符号如下所示,使用CDB命令

 x mongod!*dump 00007ff6`2d006be0 mongod!mongo::LockerImpl<0>::dump (void) 00007ff6`2d006640 mongod!mongo::LockerImpl<1>::dump (void) x /v mongod!mongo::LockerImpl<0>::dump prv func 00007ff6`cfcf6be0 597 mongod!mongo::LockerImpl<0>::dump (void) x /v mongod!mongo::LockerImpl<1>::dump prv func 00007ff6`cfcf6640 597 mongod!mongo::LockerImpl<1>::dump (void) 

调用这些符号会产生一个错误:

 .call /v mongod!mongo::LockerImpl<0>::dump() 

无法解决错误'mongod!mongo :: LockerImpl <0> :: dump()'

我也尝试使用“装饰名称”来调用它,但具有相同的结果。 其他变化也失败了:

 .call /v @!("mongod!mongo::LockerImpl<1>::dump()") .call /v mongod!mongo::LockerImpl<0>::dump(mongod!mongo::`anonymous namespace'::globalLockManager) 

无法解决'mongod!mongo :: LockerImpl <0> :: dump(mongod!mongo ::`匿名命名空间:: globalLockManager)'错误

我也尝试过传递globalLockManager实例的地址,

 u mongod!mongo::getGlobalLockManager mongod!mongo::getGlobalLockManager [c:\data\mci\c286593757a3793e6b070bc761c736b0\src\src\mongo\db\concurrency\lock_state.cpp @ 940]: 00007ff6`cfcf76a0 488d0539b0e301 lea rax,[mongod!mongo::`anonymous namespace'::globalLockManager (00007ff6`d1b326e0)] ln 0x00007ff6d1b326e0 (00007ff6`d1b326e0) mongod!mongo::`anonymous namespace'::globalLockManager | (00007ff6`d1b326f0) mongod!mongo::`anonymous namespace'::unusedLockCleaner Exact matches: 

用globalLockManager实例地址调用它:

 .call /v mongod!mongo::LockerImpl<0>::dump(0x00007ff6d1b326e0) 

无法解决“mongod!mongo :: LockerImpl <0> :: dump(0x00007ff6d1b326e0)”错误

其他types的注意事项是:

 typedef LockerImpl<false> DefaultLockerImpl; typedef LockerImpl<true> MMAPV1LockerImpl; 

注意这个函数可以从Linux / GDB调用,如下所示:

 call ('mongo::(anonymous namespace)::globalLockManager').dump()