Visual Studio 调试技巧---指针,元素个数
刚才,我在Visual Studio 中发现了一个以更好的方式调试指针的技巧。您可以在监视窗口中选择“n”,其中“n”是要显示的元素数。我认为下图是不言而喻的。
刚才,我在Visual Studio 中发现了一个以更好的方式调试指针的技巧。您可以在监视窗口中选择“n”,其中“n”是要显示的元素数。我认为下图是不言而喻的。
假设有一种情况,您从客户那里得到一个内存转储,需要模块(DLL、EXE、OCX等)来进一步调试。。(.NET模块可用于通过反向工程查看源代码。)
我们可以使用windbg目录中的clr10\sos.dll保存所有模块(在获取内存转储时由目标进程加载)。有趣的是,sos.dll不仅可以提取托管模块,还可以保存所有本机/非托管模块!
先加载sos模块
然后用!sam <path> OR !SaveAllModule <path> 提取特定磁盘位置上的模块。
如果您想查看任何windbg扩展所支持的命令,可以采用各种方法。
很多时候,在调试会话中,我们需要加载/重新加载特定模块的符号(在WinDbg的上下文中)。例如,我们开始调试,在调试时设置正常的符号路径并下载,发现我们需要特定模块的符号。我们修改符号文件路径。如果我们这样做了,
.reload /f
它从同一个位置再次加载所有符号,这可能需要时间。
所以,只找到了加载一个特定模块符号的命令,
.reload /f @“mydll.dll”
这将使用最新的符号路径加载mydll.dll的符号。
问题是,我们要调试由其他应用程序运行的应用程序的启动代码!例如,我将打开一个控制台(cmd.exe),然后打开calc.exe,我想调试初始的calc.exe代码。。
Windbg已经解决了这个问题!当您选择“打开可执行文件”时,您有一个小的复选框,上面写着“同时调试子进程”,它实际上确保所有由父EXE生成的进程(您在这个对话框中选择了它!)也由调试器附加。
如果您对命令行选项感兴趣,可以使用“-o”选项。
只有在使用“|”命令时才会出现这种情况(至少在用户模式下)!因为当我们附加到任何子进程时,它会在windbg命令行的剩余空间中显示正在调试的当前进程,如下所示!
如果您执行命令|您将能够看到列表中所有可以调试的进程(一次只能调试一个进程!)。您将得到与下面所示类似的输出。
我们还可以使用|<number>s命令在不同进程之间移动。例如,在上面的例子中,如果我们想回到debug cmd.exe,我们必须给出命令| 0s。
注意:只有在打开(生成)父可执行文件时,此操作才有效“附加到进程”没有调试所有子进程的选项!