DbgHelp教程1——初始化

以下是初始化DbgHelp最简单的代码:

SymSetOptions函数是设置DbgHelper的功能选项,具体用法见https://msdn.microsoft.com/en-us/library/windows/desktop/ms681366(v=vs.85).aspx。

SymSetOptions参数为0的时候,表示所有的选项都关闭,一下是常见的选项解释:

  • SYMOPT_ALLOW_ZERO_ADDRESS。允许符号没有地址。默认的DbgHelp会过滤掉没有地址的符号。
  • SYMOPT_CASE_INSENSITIVE。所有的搜索符号不区分大小写。
  • SYMOPT_DEBUG。通过OutputDebugString或者SymRegisterCallbackProc64 输出调试信息。
  • SYMOPT_DEFERRED_LOADS。延迟加载符号。就是知道某个模块被加载了,才会加载对应的符号。这样会提高调速速度。
  • SYMOPT_EXACT_SYMBOLS。不加载不匹配的pdb文件。
  • SYMOPT_IGNORE_CVREC。忽略CodeView里面的pdb路径
  • SYMOPT_LOAD_LINES。加载行信息
  • SYMOPT_UNDNAME。所有符号都是未修饰的形式。

可以在运行的时候多次调用SymSetOptions来修改选项,也可以用SymGetOptions来获取当前选项。

注意:所有的DbgHelp函数都是单线程的,因此不能在多个线程中调用,否则会导致不可预知的异常。

SymInitialize函数是正在的初始化DbgHelp库,它的原型如下:

  • hProcess是调用者的进程句柄。如果当局进程是调试器,要调试其它进程,那么个hProcess就是那个被调试进程的句柄。当前去进程作为调试器去调试其它进程的时候,不要用GetCurrentProcess返回的句柄。
  • UserSearchPath,符号路径,规则跟windbg一样。如果值为NULL,则读取默认位置 。
  • fInvadeProcess,如果为TRUE,枚举进程已经加载的模块,类似调用SymLoadModule64

发表评论

电子邮件地址不会被公开。 必填项已用*标注