使用 WinGDB+VS2017 的断点问题

Posted

技术标签:

【中文标题】使用 WinGDB+VS2017 的断点问题【英文标题】:Problem with breakpoints using WinGDB+VS2017 【发布时间】:2017-07-11 03:25:09 【问题描述】:

我正在为 TI MSP430 微控制器开发嵌入式 C,并在过去几天从 TI 的 IDE 和专有工具链迁移到更 unix-y 的 Sublime Text + make + gcc 工作流程。我现在正在尝试使用 WinGDB(带有 gdb 后端的 Visual Studio)设置调试,并且我已经让它大部分工作。断点只有一个问题,我怀疑它归结为反斜杠/正斜杠问题,但我不知道如何解决。

我可以毫无问题地开始调试,我可以单步调试,查看反汇编等。但是当我尝试使用 F9 在源文件中设置断点时,它显示为禁用,并带有悬停文本:

The breakpoint will not currently be hit. No source file named d:Documentsccs workspacesmsp430 scratch\013cxmain.c.

Location: main.c, line 13 ('main(void)')

但是,我可以在 WinGDB 调试器 shell 中使用 gdb 命令设置和清除工作断点,但源代码旁边没有出现红色小圆圈。

main.c 的路径是 D:\Documents\ccs workspaces\msp430 scratch\vcx\main.c,我发现转义序列 \v 对应于垂直制表符,或 ascii 中的八进制 \013。所以我猜反斜杠在某处搞砸了(感谢windows)。

有什么想法可以解决这个问题吗?

【问题讨论】:

【参考方案1】:

您显示的错误通常是在编译器优化您的代码时生成的 - 例如a = 2; 并且不再使用。但主要问题可能与您的交叉工具链有关 - 在此 link 上,WinGDB 中实现的交叉工具链是 CodeSourcery G++ Lite ARM 工具链,而您的微型 MSP430 不是 ARM 设备。 (有一个 MSP432,它是 ARM 设备)。 也许你可以看看这个:www。 Energia.nu 与 Arduino 类似,适用于多个版本的 MSP430。

【讨论】:

【参考方案2】:

您是正确的,这是一个反斜杠问题,为您的文件生成的调试记录告诉调试器哪个文件和行导致了哪组操作码。

您可以尝试修改构建过程以在任何地方使用正斜杠,因为您的工具链是基于 gcc 的,它应该找到名为 D:/Documents/ccs workspaces/msp430 scratch/vcx/main.c 但是您也可能因为路径中的空格而遇到问题,请重组您的项目,以便所有空格都被下划线替换,即D:\Documents\ccs workspaces\msp430 scratch\vcx\main.c 移动到D:\Documents\ccs_workspaces\msp430_scratch\vcx\main.c 等,路径中的空格可能会导致各种问题. 虽然可以避开路径中的空格,但最好避开它们。

我还建议看看Code::Blocks - 虽然不如 VS 漂亮,但它在为跨平台和嵌入式开发提供 IDE 和调试环境方面做得更好。 它是免费的、跨平台的并且本身是开源的。它与 GDB 的接口非常好,您可以自定义它用于您的项目的构建工具链。它甚至还附带了适用于 MSP340 的 GNU GCC 的预设,以及许多其他,所以应该非常有帮助。

【讨论】:

以上是关于使用 WinGDB+VS2017 的断点问题的主要内容,如果未能解决你的问题,请参考以下文章

VS2017 条件断点 - “不支持在此上下文中评估本机方法”

在VS 2017 xamarin android项目中没有击中断点

vs2013 无法进行断点调试,怎么解决

在vs2017写javascript进行调试,不能设置断点,出现提示,在该位置未能插入断点啥原因。

为啥vs2005调试时有时候可以进入断点,有时候进入不了断点

VS2017调试代码显示“当前无法命中断点,还没有为该文档加载任何符号”