This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCSTUDIO:ccstudio launch.json 似乎不支持多种配置

Guru**** 2420880 points
Other Parts Discussed in Thread: SEGGER

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1541418/ccstudio-ccstudio-launch-json-does-not-appear-to-support-multiple-configurations

部件号:CCSTUDIO
主题中讨论的其他部件:SEGGER

工具/软件:

背景: 我将从 CCS 11.2 迁移到新的 CCS 20.2 IDE。  这一过程非常简单。  似乎无法(可靠)在工作区内支持多个调试配置。  如下面的 launch.json 文件中所示(通过 Debug -> Open “launch.json"获得“获得)获得)、我们有三种调试配置。  我们的产品在一个链中包含数十个处理器、即使在调试会话期间、该引导加载程序也需要通过在跳转到主应用程序之前运行的引导加载程序进行同步。  此引导加载程序在调试时保留不变、因为它是我们用于将可调试可执行文件复制到链中其余所有处理器的机制、我们使用各种 GEL 脚本和命令来执行附加的操作。  主调试会话主要用于调试链中的第一个处理器、且更加简单。  它所做的只是将应用程序下载到正确的位置并发出重置命令。  这会导致引导加载程序运行并复制整个可执行文件、然后(通过 loadSymbolsOnly 选项)我们将调试器连接到已刷写的系统。  

第二个 (Debug-solo) 用于将调试探针连接到系统中的任何其他位置。 在这种情况下、我们需要使用 LMFlash、在按下全局复位按钮后、可通过 USB 强制将可调试的可执行文件下载到菊花链中的第一个文件、并以类似的方式更新下游的所有文件。  然后、我们以类似的方式连接到连接到的内核、但不会发出复位、因为 LMFlash 已经执行了此操作。   

第三种是引导加载程序调试配置、由于其正常工作、很少使用。  

在 CCS 11.2、甚至是版本 12 中一切都可以正常运行、但当我们最终转向 CCS 20.2 时、我们注意到没有直接支持基于 Eclipse 的旧工具上的原始启动配置。  这里有一个新功能、称为“launch.json"。“。  我已经成功地将“launch.json"与“与 VSCode 一起用于复杂的调试、因此我了解了它的工作原理。

现在实际问题是: 似乎无法可靠地将旧的启动配置移植到新格式。  所有选项似乎都存在、但它非常不稳定和/或随机。  在本例中、当我通过右键点击正在运行的线程“Cortex_M4_0"来“来编辑“properties"时“时、无论我在这里更改了任何设置、无论我是选择了“Debug"还是“还是“Debug-solo"配置“配置、始终将其设置写入“launch.json"中“中的第一个调试配置。  无论我在 CCS 中选择哪种调试配置(播放按钮,左侧第 4 个图标,然后在下拉列表中选择相应的项目)、我都始终开始调试第一个调试。

是的、我已经阅读了整个调试概述(此处)、还尝试了“无工程“调试、似乎无法超越所有账户中的内容、launch.json 文件中似乎是一个令人讨厌的错误。  这阻碍了我们今后使用新工具、我们希望获得解决方案或解决方案方面的任何帮助。  谢谢你。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug",
            "type": "ccs-debug",
            "request": "launch",
            "targetConfig": "${workspaceFolder}\\Software\\common_hardware.ccxml",
            "projectInfo": {
                "name": "common_hardware",
                "resourceId": "/common_hardware",
                "loadSymbolsOnly": true,
                "autoBuild": false
            },
            "connections": [
                {
                    "name": "SEGGER J-Link Emulator",
                    "cores": [
                        {
                            "name": "CORTEX_M4_0",
                            "debuggerSettings": {
                                "data": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>\n<PropertyValues>\n\n  <property id=\"ResetOnRestart\">\n    <curValue>0</curValue>\n  </property>\n\n  <property id=\"RestartOnSymbolLoad\">\n    <curValue>0</curValue>\n  </property>\n\n  <property id=\"HaltOnConnect\">\n    <curValue>1</curValue>\n  </property>\n\n  <property id=\"AutoResetOnConnect\">\n    <curValue>0</curValue>\n  </property>\n\n</PropertyValues>\n"
                            }
                        }
                    ]
                }
            ]
        },
        {
            "name": "Debug-solo",
            "type": "ccs-debug",
            "request": "launch",
            "targetConfig": "${workspaceFolder}\\Software\\common_hardware-solo.ccxml",
            "projectInfo": {
                "name": "common_hardware",
                "resourceId": "/common_hardware",
                "loadSymbolsOnly": true,
                "autoBuild": false
            },
            "connections": [
                {
                    "name": "SEGGER J-Link Emulator",
                    "cores": [
                        {
                            "name": "CORTEX_M4_0",
                            "debuggerSettings": {
                                "data": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>\n<PropertyValues>\n\n  <property id=\"ResetOnRestart\">\n    <curValue>1</curValue>\n  </property>\n\n  <property id=\"RestartOnSymbolLoad\">\n    <curValue>1</curValue>\n  </property>\n\n  <property id=\"HaltOnConnect\">\n    <curValue>1</curValue>\n  </property>\n\n  <property id=\"AutoResetOnConnect\">\n    <curValue>1</curValue>\n  </property>\n\n</PropertyValues>\n"
                            }
                        }
                    ]
                }
            ]
        },
        {
            "name": "bootloader",
            "type": "ccs-debug",
            "request": "launch",
            "projectInfo": {
                "name": "bootloader",
                "resourceId": "/bootloader"
            }
        }
    ]
}


e2e.ti.com/.../gels.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在 CCS 安装时进行了快速尝试、就好像我们将设置写入错误的配置、那真的很糟糕一样。  我在 launch.json 中有一堆配置。  我做了一个快速的实验,以确保设置被写入正确的设置,而不是总是说最后的一个  这对我来说是正常的。  有人将需要跟进并深入研究此问题。  一般来说、您应该能够拥有所需的尽可能多的配置。  很遗憾、无法从 CCSv12 迁移启动设置。   

    此致、

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 John 的尝试。  是否知道您使用的是“专用的 CSS 工作区“、而不是 此 e2e 主题中所述的“工作区文件“?  我一直在尝试确切地了解这个人的意思,似乎还不能把我的头缠绕在它周围。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Brad、

    我正在使用多根工作区。  即我添加了其他文件夹的工作区。  在 launch.json 设置中、这确实会更改一些位。

    对我来说、我有默认的工作区、然后根据我所处理的内容添加/删除文件夹。

    目前、我有 2 个附加文件夹处于打开状态。  这些文件夹中的每个文件夹都有自己的 launch.json。

    昨天我尝试使用目标配置文件夹的 launch.json 进行实验。  此文件夹中有一堆.ccxml 文件、然后选择我想要的文件、并启动无工程调试会话。   

    这里是我的 target-configurations/.theia 文件夹的一个(我折叠了第一组配置)。

    我不经常使用工作区文件、但一旦您向工作区添加一个额外的根文件夹、系统就会提示您是否要将其另存为文件。  我通常不会。  这些文件非常有用、因为您可以使用不同的根文件夹集预配置它们。  我通常不会费心、只添加和删除我感兴趣的文件夹。  

    您正在使用工作区文件吗? 如果可以、我可以尝试使用它进行一些实验。

    此致、

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 John。  我尝试像您一样设置工作区、遇到了更多问题。  总而言之、launch.json 文件似乎不稳定。  在玩周围,我设法使它进入一个状态,破坏了文件。  该工具似乎正在同时编辑该文件。  我将继续尝试,但到目前为止,这似乎是一个非启动,对我们来说,这是一个非常坏的消息,因为我们将不得不保持在旧的工具,直到这得到修复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    遗憾的是、我现在可以确认与前面所述完全相同的行为、即使我使用单独的文件夹且不保存工作区文件也是如此。  似乎 launch.json 机制严重破坏了,至少对我们来说。   

    我启动了“Debug-solo"配置“配置(下一个配置)、右键点击该线程时对属性进行了一些更改、并保存这些更改、更改就会直接保存到“Debug"配置“配置中。  我现在可以在第 22 行看到 git 的确切变化。  该工具修改了 Debug 配置的设置、而不是像我在工具中选择的那样执行 Debug-solo。  真的很令人沮丧   

    我很好奇他人怎么看不到这种行为。

    编辑: 我的文件中的第 22 行对应于“debugerSettings"字“字段中的第 52 行和第 71 行。  在调试时尝试更改这些值、并查看结果是否保存到相应的调试配置中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Brad、

    我尝试更改了许多不同配置的设置。  对我来说、它总是写入正确的数据。  我想看看我们是否可以与其他人联系、以帮助调试正在发生的事情。

    此致、

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Brad:

    我当时正尝试使用该器件。 我尝试了尽可能多地复制您的环境 — 包括如何在工程外部显式指定目标配置文件。 执行同样操作时、我遇到了在调试工程时遇到的问题。 我正在与工程部门讨论、看起来可能存在一些缺陷、导致此问题无法正常工作。 这就引出了我们的下一个问题 — 它在您的环境中是如何工作的? 您的工程中是否有希望使用 targetConfig 选项覆盖的 ccxml 文件? 请注意、对于工程启动配置、如果找到了现有的 ccxml、它将始终使用工程中的现有 ccxml。 只有在找不到时才使用通过 targetConfig 选项指定的电流。  

    谢谢

    Ki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ki:

    在以前的环境 (CSS 11.2.x) 中,我们使用了各种独立的启动配置,这些配置不一定“在项目之外“。  据我所知、在大多数情况下、它们至少与项目文件“并列“在同一文件夹中。  我们现在知道、这些独立的启动配置中的每一个都需要合并到一个统一的 launch.json 文件中。  但是、在每个单独的启动配置中、我们都指定了一个适当配置的唯一 ccxml 文件、该文件定义了通常的调试器设置、以及会话期间调用的任何 GEL 脚本。  因此、在我们看来、我们应该能够在启动配置中指定所需的设置。  那么、为什么要有这个选项呢?  回退应该是在启动 imo 中指定的 ISN“T 时搜索目录。  

    在该启动配置中、有关如何配置连接的设置(连接时停止,连接时复位等)都保存在这些启动文件中、并且可以在调试会话启动之前进行编辑。  在 CSS20 中、您必须启动会话(希望您甚至可以右键单击某个线程)、然后编辑这些设置。  如果由于连接问题而无法解决、除非这些设置正确、否则无法到达该点会发生什么情况?  对我来说似乎是一个鸡肉/鸡蛋问题。

    很高兴您能看到此工具存在一些错误行为。  如果您在工作中有一个解决方案、我们可以快速返回。  但从我们的角度来看、现在在生产中使用它是不可行的。  我正在寻找其他方法来让我们进入纯 VSCode IDE 解决方案。  我已经转换为 makefile 版本、下一步是验证是否可以调试。  我们使用 Segger 探针,并且芯片是直接支持的,所以它似乎应该工作,除非我完全误解了一些东西。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在以前的环境 (CSS 11.2.x) 中、我们使用了各种独立的启动配置、这些配置不一定“在项目之外“。  据我所知、在大多数情况下、它们至少与项目文件“并列“在同一文件夹中。  我们现在知道、这些独立的启动配置中的每一个都需要合并到单个统一的 launch.json 文件中

    不一定。 如果您 明确地 将工程文件夹添加到现有工作区环境中以创建 多根工作区、则每个“root"都“都有自己的 launch.json 文件。 在这种情况下、项目文件夹本身*应该*具有自己的.theia/launch.json 文件。

    我说“应该“,因为我发现了另一个错误:

    https://sir.ext.ti.com/jira/browse/EXT_EP-12759

    但是、在每个单独的启动配置中、我们指定了一个适当配置的唯一 ccxml 文件、该文件定义了常规的调试器设置、以及会话期间调用的任何 GEL 脚本。  因此、在我们看来、我们应该能够在启动配置中指定所需的设置。  那么、为什么要有这个选项呢?  回退应该是在启动 imo 中指定的 ISN“T 时搜索目录。  [/报价]

    您的用例当然是有效的。 我想这里有一个不同之处、那就是如果一个 ccxml 文件已经存在、则默认值应该是什么。 您提议的默认值对我来说是合理的、我将向工程部门提出此建议。

    但是、我仍然无法重现:

    在本例中、当我右键点击正在运行的线程“Cortex_M4_0"编辑“编辑“properties"时“时、无论我在这里更改了任何设置、无论我选择了“Debug"还是“还是“Debug-solo"配置“配置、都始终将其设置写入“launch.json"中“中的第一个调试配置。  无论我在 CCS 中选择哪种调试配置(播放按钮,左侧第 4 个图标,然后在下拉列表中选择相应的项目)、我都始终开始调试第一个调试配置。

    这(至少)似乎是有效的。 将属性写入正确的配置、并会启动调试会话以进行我选择的正确启动。

    很高兴您能看到此工具存在一些错误行为。  如果您在工作中有一个解决方案、我们可以快速返回。  [/报价]

    似乎有几个问题。 我获悉最近修复的与 J-Link 相关的另一个问题、该问题将出现在即将发布的 CCS 20.3.0 版本中。 我希望尝试使用所有这些修复程序的早期 alpha 版本 20.3.0、看看是否能更好地运行。 我不确定您是否要等待这么久才修复这些问题。

    我正在寻找其他方法让我们进入纯 VSCode IDE 解决方案。  [/报价]

    这实际上是我们路线图上的内容。 我们甚至有一个在 GDB+OpenOCD 上构建的初始选项、它支持一小部分器件:

    https://marketplace.visualstudio.com/items?itemName=ti-development-tools.ti-embedded-debug

    虽然支持某些 CC 器件、但遗憾的是未支持 CC13x4 和 CC27xx。

    [/quote][/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的帮助、KI。  我会再次提出这些建议。  不幸的是、我认为我不能创建一个包含启动配置的示例的自包含导出、该示例演示了我的问题、因为大多数启动配置对于最终用户非常具体。  除非您具有确切的调试设置、否则我不确定它会对您有用。  如果你认为它会有帮助,我可以看看调查.

    我在使用 AI 自动创建工程 makefile 方面已经取得了一些成功。这似乎仅使用 TI 安装的命令行工具来构建可执行文件、并完全绕过 CCS。  目前未知的是我是否可以让调试会话通过 JLink 工作。  SEGGER 直接支持 TM4C123X 线、据说使用了 Ozone 工具、因此我不明白为什么不支持。  最新的 Copilot 改进足以激励我们进入新工具。  我希望 CCS 有一天能够安装 copilot 扩展,但 ATM 我明白为什么这不是一个选项后,研究为什么它不附带该功能的开箱.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您认为这会很有帮助、我可以研究一下这一点。

    在 CCS 20.3.0 中解决了所有提到的错误后、我想继续说明这一点。 这将是一个更稳定的环境。 如果事情看起来很好,也许我可以给你一个测试版尝试(如果你愿意).