我试图使用symgetlinefromaddr64获取我在堆栈遍历中收集的地址的行号,但似乎无法获取简单命令的地址或它们的行。
例如,如果我正在查看以下方法:
void Test(int g)
{
g++;
DoSomething(g);
g--;
}我将只得到"DoSomething“的行号,但我想要"g++”的行号等等。我认为这是可行的,因为调试器会这样做。我如何在windows上的c++中自己做呢?
发布于 2011-02-06 14:39:49
堆栈遍历将只检索存储在堆栈上的地址,这很大程度上意味着函数调用。如果你想要你的g++或g--的地址,你需要使用堆栈遍历以外的方法来获取它们(例如,SymGetFileLineOffsets64)。如果您从栈道开始,并且拥有来自SymGetLineFromAddr64的信息,则可以使用SymGetLineNext64和SymGetLinePrev64来获取有关周围线路的信息。
发布于 2011-02-06 15:07:11
唯一的方法是使用编译器生成的符号文件,就像microsoft visual studio编译器的*.pdb文件(pdb代表程序数据库)。这些文件包含编译步骤中使用的所有符号。即使对于发布版的编译,您也可以获得有关正在使用的符号的信息(有些符号可能已经过优化)。
主要缺点是这是高度依赖于编译器/特定于编译器的。例如,gcc可以在可执行文件或可执行文件中包括符号信息。其他编译器有其他格式...
你使用什么编译器(名称/版本)?
https://stackoverflow.com/questions/4911968
复制相似问题