zoukankan      html  css  js  c++  java
  • Debug相关的一些小技巧

    1. 如何Debug一个进程的子进程?

    答: 使用WinDBG attach到父进程, 然后输入命令".childdbg 1"(无引号). 这样子进程在刚刚被加载的时候, WinDBG就Attach上去了. 这两个进程的debug session都在一个WinDBG的窗口里, 如果想要切换当前进程, 可以使用命令"|"来查看所有的进程, 使用"|0s"来切换到ID为0的进程, 以此类推.

    2. 如何在进程刚刚加载的时候, 就使用Debugger attach上去?

    答: 使用GFlags. 参考资料的文章里有详细的介绍. 这里贴出原文的两张图, 以及一些要点, 所见即所得.

    image

    image

    3. 我使用上面的方法成功attach了进程, 可是当我试图定义CLR断点的时候却遇到下面的提示. 如果我继续执行, 不等我按break, 我想查看的函数已经执行过了. 请问该怎么办?

    1:027> !bpmd Microsoft.Office.Server.Search.dll Microsoft.Office.Server.Search.Administration.NotesWebServiceWrapper.NotesDataClass.GetDatabase
    Failed to find runtime DLL (mscorwks.dll), 0x80004005
    Extension commands need mscorwks.dll in order to have something to do.

    答: 上面的提示之所以显示是因为在我们break掉此进程的时候, CLR还没有被加载起来, 所以, CLR debugger extension的命令还无法执行.

    这个时候, 可以运行下面的命令, 来在CLR加载刚刚结束的时候, 就停下来给我们定义断点的机会.

    bp mscorwks!EEStartup "g @$ra"

    注意这里的"g @$ra"的意思是"继续执行直到返回地址被发现". 这里的@符号的意思是告诉debugger, 该符号后面跟随的是一个寄存器或者伪寄存器, 如果没有这个符号, 该命令执行会很慢, 因为debugger会搜索整个符号表.

    参考资料

    ================

    How to debug a process as soon as it starts with WinDbg or Visual Studio 2010

    http://bugslasher.net/2011/03/26/how-to-debug-a-process-as-soon-as-it-starts-with-windbg-or-visual-studio-2010/

    Advanced .Net Debugging with SOS Extension in Visual Studio - FAQ

    http://netinverse.com/devblogs/debugging/advanced-net-debugging-with-sos-extension-in-visual-studio-faq/415/

  • 相关阅读:
    Django 前后端数据传输、ajax、分页器
    项目分层
    The Jaisalmer Desert Festival 2017/2/9
    Slacklining 2017/2/7
    Slacklining 2017/2/6
    SnowKiting 2017/1/24
    ADO1
    SnowKiting
    CSS-学习笔记六
    D Vitamin
  • 原文地址:https://www.cnblogs.com/awpatp/p/2727278.html
Copyright © 2011-2022 走看看