首页>
知识库>
详情

WinCE下查看函数调用堆栈

2020-06-30 来源:CloudBest 阅读量: 5
关键词:

  1.     获得函数调用堆栈地址
  2.     WinCE下可以通过函数GetCallStackSnapshot()来获得函数调用堆栈地址。该函数在pkfuncs.h中定义。
  3.     文件路径:
  4.     c:\Program Files\Windows CE Tools\wce600\PanelViewPlus SDK\Include\X86\pkfuncs.h
  5.     函数定义:
  6.     ULONG GetCallStackSnapshot (ULONG dwMaxFrames, CallSnapshot lpFrames[], DWORD dwFlags, DWORD dwSkip);
  7.     dwMaxFrames: 最大堆栈的个数
  8.     lpFrames: 返回堆栈的数组
  9.     其中 CallSnapshot定义:
  10.     typedef struct _CallSnapshot {
  11.     DWORD dwReturnAddr;
  12.     } CallSnapshot;
  13.     dwReturnAddr 为函数返回地址, 通过该地址结合map文件就可以找到调用的函数名。
  14.     例子:
  15.     #define MAX_FRAME_COUNT 10
  16.     CallSnapshot lpFrames[MAX_FRAME_COUNT];
  17.     int nRet = GetCallStackSnapshot(MAX_FRAME_COUNT, lpFrames, 0, 1);
  18.     MAP 文件
  19.     MAP 文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方、任何时候使用,不需要有额外的程序进行支持。 MAP文件可以在Visual Studio中设置,在编译工程的时候产生:
  20.    

        生成的MAP文件可以指定名称,如不指定则为工程名字,扩展名为。map。

  21.     打开map文件可以看到为如下格式:

  22.     TestClient

  23.     Timestamp is 4bbbf1e9 (Wed Apr 07 10:46:01 2010)

  24.     Preferred load address is 00400000

  25.     Start Length Name Class

  26.     0001:00000000 00001182H .text CODE

  27.     0001:00001190 000000b3H .text$x CODE

  28.     0001:00001250 0000005eH .text$yc CODE

  29.     0001:000012b0 0000001bH .text$yd CODE

  30.     0002:00000000 00000324H .idata$5 DATA

  31.     0002:00000324 00000004H .CRT$XCA DATA

  32.     0002:00000328 00000004H .CRT$XCAA DATA

  33.     0002:0000032c 00000004H .CRT$XCL DATA

  34.     0002:00000330 00000008H .CRT$XCU DATA

  35.     0002:00000338 00000004H .CRT$XCZ DATA

  36.     0002:0000033c 00000004H .CRT$XIA DATA

  37.     0002:00000340 00000004H .CRT$XIAA DATA

  38.     0002:00000344 00000004H .CRT$XIY DATA

  39.     0002:00000348 00000004H .CRT$XIZ DATA

  40.     0002:00000350 00000640H .rdata DATA

  41.     0002:00000990 0000005aH .rdata$debug DATA

  42. <SPAN style="FONT-FAMILY