现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

Debug相关的一些小技巧

2013-11-14 23:00 工业·编程 ⁄ 共 857字 ⁄ 字号 暂无评论

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会搜索整个符号表.

给我留言

留言无头像?