【发布时间】:2016-10-09 04:50:33
【问题描述】:
我在大学和目前的工作中使用 gdb 完成了很多工作,但我需要学习如何在 Windows 上使用 CDB 和 WinDBG 进行开发。我更喜欢使用 CDB,因为在 Emacs 中有一个很好的模式。
启动 CDB 后如何更改当前目录?这很有用,因为当前目录默认为可执行目录(
cdb C:/dev/myexe.exe将给出当前 dir=c:/dev,尽管我从C:/testdir启动了 cdb),但我可能在不同的驱动器上有一个测试目录'宁愿用作工作目录。或者我可能有多个测试目录,我想在它们之间轻松切换,而不会丢失进程的断点。可以使用cd在 GDB 中更改工作目录。这在 CDB 中如何实现?假设我开始使用
cdb my.exe arg1 arg2调试一个新进程,在设置断点和代码单步执行几分钟后,我意识到我应该指定一个额外的参数。在 GDB 中,我可以在运行进程时设置命令行参数 (r arg1 arg2 newarg3 ...)。我的断点和工作区中的所有内容都保持不变。可以在 CDB 中做到这一点吗?看来我需要保存工作区,使用调试过程的新参数重新启动 CDB,然后加载工作区以获取断点,这比发出运行命令要多得多。
在过去的几周里断断续续地搜索后,我还没有找到答案,我真的很想摆脱 Visual Studio 调试。
编辑:澄清 #1 和 #2
【问题讨论】:
-
您是否正在使用这个emacswiki.org/emacs/cdb-gud.el?根据 cmets,工作目录应该是您附加到的可执行文件,而不是 cdb 所在的位置。在那之后,我认为真的没有问题,因为您可能总是需要告诉它符号、源文件的位置。关于 2. 你想通过什么论点?如果您在 cdb 中保存工作区,它应该保存所有断点,这在 WinDbg 中肯定是正确的。我猜在最后一点,因为我只使用 WinDbg
-
我澄清了#1。对于 #2,假设我执行
cdb myexe.exe arg1 arg2。在调试和设置断点之后,我意识到我应该指定一个额外的(但可选的)参数来重现错误。如果我在 GDB 中这样做,我可以发出r arg1 arg2 newarg3并且一切正常。在 CDB 中,如何使用新的命令行参数重新启动调试程序? -
不知道 1. 但是对于 2. 您可以创建一个带有参数msdn.microsoft.com/en-us/library/windows/hardware/… 的脚本文件,这将使用可变参数执行您的脚本
标签: windbg