DIA SDK如何获取FuncDebugStart/FuncDebugEnd的父函数?

DIA SDK how to get parent function of FuncDebugStart / FuncDebugEnd?

SymTagFuncDebugStartSymTagFuncDebugEnddocumentation 声明调用 IDiaSymbol::get_lexicalParent 将 return 封闭函数的符号。我将其解释为我将得到一个 IDiaSymbolget_symTag 方法 returns SymTagFunction。但是,当我这样做时,它 return 是 SymTagCompiland 而不是函数。所以文档看起来是错误的,但更糟糕的是我不确定如何将 SymTagFuncDebugStartSymTagFuncDebugEnd 实际绑定到包含 SymTagFunction.

有人知道吗?一些转储表明,当通过 IEnumSymbols 枚举符号时,SymTagFuncDebugStartSymTagFuncDebugEnd 总是紧跟在相应的 SymTagFunction 之后。或者换句话说,如果函数 IDiaSymbol::get_symIndexId returns n ,函数调试将分别 return n+1n+2开始和功能调试结束。

但我不能确定这是否总是正确的,而且这似乎不可靠且老套。

有人对执行此操作的正确方法有任何建议吗?

你能把你的代码贴在这里吗?我猜你的代码有问题。在 SymTagFuncDebugStartSymTagFuncDebugEnd 上调用 get_lexicalParent 应该 return 与封闭函数 (SymTagFunction) 关联的符号。

我最终成功了。问题是,当您使用 SymTagNull 枚举全局范围内的所有符号时,您会发现 FuncDebugStartFuncDebugEnd 符号。这些符号的词法父级是全局作用域,因为它是 "parent",因为它向您提供了指向 FuncDebugStartFuncDebugEnd 符号的指针。

但是,如果您通过在实际的 SymTagFunction 符号上调用 findChildren 来获得 FuncDebugStartFuncDebugEnd,那么它的词法父项实际上就是原始函数.所以这是一个文档不清晰的问题。