DIA SDK如何获取FuncDebugStart/FuncDebugEnd的父函数?
DIA SDK how to get parent function of FuncDebugStart / FuncDebugEnd?
SymTagFuncDebugStart
和 SymTagFuncDebugEnd
的 documentation 声明调用 IDiaSymbol::get_lexicalParent
将 return 封闭函数的符号。我将其解释为我将得到一个 IDiaSymbol
其 get_symTag
方法 returns SymTagFunction
。但是,当我这样做时,它 return 是 SymTagCompiland
而不是函数。所以文档看起来是错误的,但更糟糕的是我不确定如何将 SymTagFuncDebugStart
和 SymTagFuncDebugEnd
实际绑定到包含 SymTagFunction
.
有人知道吗?一些转储表明,当通过 IEnumSymbols
枚举符号时,SymTagFuncDebugStart
和 SymTagFuncDebugEnd
总是紧跟在相应的 SymTagFunction
之后。或者换句话说,如果函数 IDiaSymbol::get_symIndexId
returns n
,函数调试将分别 return n+1
和 n+2
开始和功能调试结束。
但我不能确定这是否总是正确的,而且这似乎不可靠且老套。
有人对执行此操作的正确方法有任何建议吗?
你能把你的代码贴在这里吗?我猜你的代码有问题。在 SymTagFuncDebugStart
和 SymTagFuncDebugEnd
上调用 get_lexicalParent
应该 return 与封闭函数 (SymTagFunction
) 关联的符号。
我最终成功了。问题是,当您使用 SymTagNull
枚举全局范围内的所有符号时,您会发现 FuncDebugStart
和 FuncDebugEnd
符号。这些符号的词法父级是全局作用域,因为它是 "parent",因为它向您提供了指向 FuncDebugStart
和 FuncDebugEnd
符号的指针。
但是,如果您通过在实际的 SymTagFunction
符号上调用 findChildren
来获得 FuncDebugStart
和 FuncDebugEnd
,那么它的词法父项实际上就是原始函数.所以这是一个文档不清晰的问题。
SymTagFuncDebugStart
和 SymTagFuncDebugEnd
的 documentation 声明调用 IDiaSymbol::get_lexicalParent
将 return 封闭函数的符号。我将其解释为我将得到一个 IDiaSymbol
其 get_symTag
方法 returns SymTagFunction
。但是,当我这样做时,它 return 是 SymTagCompiland
而不是函数。所以文档看起来是错误的,但更糟糕的是我不确定如何将 SymTagFuncDebugStart
和 SymTagFuncDebugEnd
实际绑定到包含 SymTagFunction
.
有人知道吗?一些转储表明,当通过 IEnumSymbols
枚举符号时,SymTagFuncDebugStart
和 SymTagFuncDebugEnd
总是紧跟在相应的 SymTagFunction
之后。或者换句话说,如果函数 IDiaSymbol::get_symIndexId
returns n
,函数调试将分别 return n+1
和 n+2
开始和功能调试结束。
但我不能确定这是否总是正确的,而且这似乎不可靠且老套。
有人对执行此操作的正确方法有任何建议吗?
你能把你的代码贴在这里吗?我猜你的代码有问题。在 SymTagFuncDebugStart
和 SymTagFuncDebugEnd
上调用 get_lexicalParent
应该 return 与封闭函数 (SymTagFunction
) 关联的符号。
我最终成功了。问题是,当您使用 SymTagNull
枚举全局范围内的所有符号时,您会发现 FuncDebugStart
和 FuncDebugEnd
符号。这些符号的词法父级是全局作用域,因为它是 "parent",因为它向您提供了指向 FuncDebugStart
和 FuncDebugEnd
符号的指针。
但是,如果您通过在实际的 SymTagFunction
符号上调用 findChildren
来获得 FuncDebugStart
和 FuncDebugEnd
,那么它的词法父项实际上就是原始函数.所以这是一个文档不清晰的问题。