0

我正在尝试使用 symgetlinefromaddr64 获取我在 stackwalk 中收集的地址的行号,但我似乎无法获取简单命令或其行的地址。
例如,如果我正在查看方法:

void Test(int g)
{
  g++;
  DoSomething(g);
  g--;
}

我只会得到“DoSomething”的行号,但我想要“g++”等的行号。我想这是可行的,因为调试器会这样做。我怎样才能在 Windows 上用 c++ 自己做呢?

4

2 回答 2

0

堆栈遍历只会检索存储在堆栈上的地址,这几乎意味着函数调用。如果您想要g++or的地址,则g--需要使用堆栈遍历以外的方法来获取它们(例如,SymGetFileLineOffsets64)。如果您从 stackwalk 开始并从获取信息SymGetLineFromAddr64,则可以使用SymGetLineNext64SymGetLinePrev64获取有关周围线路的信息。

于 2011-02-06T06:39:49.350 回答
0

唯一的方法是使用编译器生成的符号文件,例如*.pdbmicrosoft Visual Studio 编译器的文件(pdb 代表程序数据库)。这些文件包含编译步骤中使用的所有符号。即使对于发布编译,您也会获得有关正在使用的符号的信息(有些可能已被优化掉)。

主要缺点是这高度依赖于编译器/特定于编译器。例如 gcc 可以在可执行文件或可执行文件中包含符号信息。其他编译器有其他格式...

您使用什么编译器(名称/版本)?

于 2011-02-06T07:07:11.193 回答