代码之家  ›  专栏  ›  技术社区  ›  halivingston

编写windbg脚本,以便在每次调用堆栈中断时获取它,然后继续(未处理的ex,或调试人员说debug.break())

  •  3
  • halivingston  · 技术社区  · 15 年前

    我们正在运行一个应用程序,碰巧是我们编写的Web服务器,我们只是在生产中说了一些令人讨厌的问题,所以在大约12个小时内,我们将把它放在windbg下,并在每次中断时获取调用堆栈。

    有时它会因为一个未处理的异常而中断,有时我们会命中一个断言,这时我们的代码说如果在调试器下运行,就中断。

    是否有可能以这样一种方式挂入windbg:一旦windbg断开,它就需要一个调用堆栈,然后立即继续?

    2 回复  |  直到 15 年前
        1
  •  3
  •   mjsabby    15 年前

    将调试程序附加到生产框中可能会造成灾难性的后果,(a)性能(b)意外中断调试程序

    为了安全起见,请确保禁用所有不关心或不希望闯入调试器的异常。

    sxd *
    

    然后,选择您想以某种方式处理的内容(接受callstack,然后继续)

    sxe -c "kb;g" bpe
    sxe -c "kb;g" asrt
    sxe -c "kb;g" eh
    

    第一个是断点异常处理程序、断言失败和C++ EH异常。

    有一个很大的清单列出了调试器支持的内容,例如,如果您加载sos.dll(windbg的clr扩展),那么您将能够

    sxe -c "kb;g" clr
    

    有关可以筛选的异常/事件类型的权威信息,请参阅windbg帮助(搜索sxe)

        2
  •  0
  •   whunmr    15 年前

    尝试

    sxe -c "kb;g" -h wkd
    

    sxe -c "kb;g" -h eh
    

    搜索 控制异常和事件 有关详细信息,请参阅windbg的帮助文档。