断点当前无法触发。无法在目标上设置所请求的断点。

5

最近我在使用Arduino Uno板子开发,但是我的代码出现了问题,我无法使用ArduinoIde中的print()函数进行调试。因此,我下载了AtmelStudio 6.2来进行调试。

当我设置断点并尝试构建时,出现了警告:

断点当前无法被命中。无法在目标上设置请求的断点。当前选择的设备无法在运行时设置断点。

请帮忙解决这个问题。


我发现在受影响的文件中引起编译错误(添加一个拼写错误然后再编译)后,纠正该错误并重新编译后问题就得到了解决。 - Mark
4个回答

3

2

以下解决方法可用于在Atmel Studio 7中使用Atmel-ICE时,解决ATMega 168P出现的同样问题。

1. 汇编代码

在您想要设置断点的位置插入以下汇编代码:

asm("break");

请注意,这是一种非常丑陋的解决方案,并不适用于所有情况。它只能与DEBUGwire一起使用,并使您的程序在任何情况下停止运行,即使没有程序员连接也是如此。
2. 创建新项目
将新项目创建在不同的位置也有帮助。我将所有所需文件复制到了新文件夹中。新位置具有短路径(C:\atmel\project...),不包含空格、变音符等。

2
我曾遇到类似的问题,不同之处在于我只能在项目中原有的模块(即创建 .cproj 时已经存在的模块)中设置断点进行调试,而后来添加的模块则无法按照所设的断点停止程序。
@pafodie 提到的解决方案(2)可以解决这个问题,但是我发现了一种更简单的方法:删除 .atsuo 文件即可。这个文件稍后会自动重建,这样问题就消失了(至少在你添加更多模块之前)。似乎 AS6 在那里缓存了一些东西,当新文件被添加时没有更新或者更新不正确。

刚刚帮我解决了AS7的问题,谢谢。(我实际上删除了包含.atsuo文件的整个.vs目录) - firda

0
如果使用外部Makefile,请确保在CFLAGS中设置-g(调试)标志。
否则,Atmel Studio将不知道源文件与编译后的二进制文件的对应关系。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接