gpt4 book ai didi

windbg - 将当前目录和命令行参数更改为 CDB 调试过程

转载 作者:行者123 更新时间:2023-12-02 01:16:46 31 4
gpt4 key购买 nike

我在大学和现在的工作中使用了 gdb,但我需要学习如何使用 CDB 和 WinDBG 在 Windows 上进行开发。我更喜欢使用 CDB,因为在 Emacs 中有一个很好的模式。

  1. 如何在启动 CDB 后更改当前目录?这很有用,因为当前目录默认为可执行目录(cdb C:/dev/myexe.exe 会给出当前目录=c:/dev,尽管我从 C:/testdir),但我可能在不同的驱动器上有一个测试目录,我更愿意将其用作工作目录。或者我可能有多个测试目录,我想在它们之间轻松切换而不会丢失过程的断点。可以使用 cd 在 GDB 中更改工作目录。这在 CDB 中如何实现?

  2. 假设我开始使用 cdb my.exe arg1 arg2 调试一个新进程,在设置断点和代码步进几分钟后,我意识到我应该指定一个额外的参数。在 GDB 中,我可以在运行进程时设置命令行参数 (r arg1 arg2 newarg3 ...)。我的断点和工作区中的所有内容都保持不变。在 CDB 中可以这样做吗?看来我需要保存工作区,使用调试过程的新参数重新启动 CDB,然后加载工作区以获取断点,这比仅发出运行命令要多得多。

在过去几周断断续续地搜索之后,我还没有找到这些问题的答案,我真的很想摆脱 Visual Studio 调试。

编辑:澄清#1 和#2

最佳答案

嗯,这不像在 GDB 中那么容易,但在 CDB 中是可能的。

要更改工作目录并维护断点,您必须 .kill这个过程,告诉它从哪里开始使用.creatdir ,并使用 .create 重新启动进程.

例如:

 0:000> bp CreateFileW 
0:000> bl 0 e 750316af
0001 (0001) 0:**** kernel32!CreateFileW
0:000> .kill
Terminated. Exit thread and process events will occur.
0:000> .createdir d:\dev
Process creation dir: d:\dev
Process will inherit handles
0:000> .create c:\windows\system32\notepad.exe
CommandLine: c:\windows\system32\notepad.exe
Starting directory: d:\dev
Create will proceed with next execution
0:000> g
Symbol search path is: SRV*d:\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is: ModLoad: 00880000 008b0000 notepad.exe eax=00000000
ebx=00000000 ecx=25c50000 edx=0009dc08 esi=fffffffe edi=00000000 eip=774d0fac
esp=000df398 ebp=000df3c4 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b
ds=002b es=002b fs=0053 gs=002b efl=00000244
ntdll!LdrpDoDebuggerBreak+0x2d: 774d0fac 8975fc mov dword ptr [ebp-4],esi ss:002b:000df3c0=00000000
0:000> bl 0 e 750316af
0001 (0001) 0:**** kernel32!CreateFileW
0:000> g

要使用不同的参数重新启动,您可以执行相同的操作 .kill然后将新参数传递给 .create命令。

如果您要经常这样做,那么我会花一些时间编写一个脚本,使这个多步骤过程变得更容易。

关于windbg - 将当前目录和命令行参数更改为 CDB 调试过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10376488/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com