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.

[参考译文] CCS/CCStudio-Sitara:C++代码,无法在调试器中看到变量类

Guru**** 2540720 points
Other Parts Discussed in Thread: EK-TM4C129EXL

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/576291/ccs-ccstudio-sitara-c-code-cannot-see-variables-class-in-debugger

部件号:CCStudio-Sitara
主题中讨论的其他部件:EK-TM4C129EXL

工具/软件:Code Composer Studio

您好,

J AM使用CCS版本:6.1 .2.0.0015万 和Sitara处理器。

我用C++语言重写我的代码来改进它,如果我对它进行调试,就不可能看到类的内容。

我的代码:

1:childClass.cpp

级子级

   公开:
      儿童类();
      虚拟~子类();

      无符号短 值0;
      无符号短 值1;
};

2:MasterClass.cpp (包含子类):

一流的大师级

   公开:
      masterclass();
      虚拟~masterclass();

      未签名的短masterValue;

      子类m_child;
};

 

3:CppCall.cpp (主类,包含 全局主类):

masterclass* m_pMaster;                   //由新(堆)生成的全局masterclass*
主类m_pMasterPlat;                //在.BSS段中生成全局主类(Pinit区域)

void MainCall (未签名的短nAlStatus)
{    
   IF (m_pMaster ==空)
      m_pMaster = new masterclass();//   将其分配到堆区域

   m_pMaster->masterValue =5;     
   m_pMasterPlat.masterValue = 10;

在   此处返回0;//断点
}

 

4:断点后的监视结果:

对于.bss区域中的masterclass generate,可以:


 

对于由新的生成的主类来说,这是一个很坏的问题:

 

“表达式”窗口:

 

是否有任何选项可以启用对该变量的访问?

在另一篇文章中,我找到了这样的回答:“如果打开了完整的符号调试,并且优化器关闭了”,那么这些参数在哪些部分准确定位?

JM

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试在表达式窗口中使用*m_pMaster。
    斯蒂芬
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我可以打开m_child;但是,我使用的是C2000编译器15.12 v.4.LTS。
    斯蒂芬
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请测试将volatile关键字添加到m_child member变量中是否可以解决该问题,即

    类masterclass
    {
    公开:
    masterclass();
    虚拟~masterclass();
    
    未签名的短masterValue;
    
    易失子类m_child;
    }; 

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

    首先,我在中重命名:"masterclass m_pMasterPlat" "masterclass m_masterPlat"
    更适合理解,因为它不是指针类...

    在“表达式”窗口中添加*m_pMaster:Bad r é sult.
    我在"不好的回答"之前加上"挥发性"一词。
    对于编译器,我使用的是GNU 4.8 v.4 (Linaro)。

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

    我忘了提到,我正在使用6.2。   6.1 可能有问题。  我没有6.1。2,但我有6.1 1和6.1。3。  我会尝试这些,然后再回来。

    斯蒂芬

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    6.1 的结果是相同的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请参阅 processors.wiki.ti.com/.../Using_GCC_with_Tiva_in_CCSv6中的“使用CCS GCC/Linaro 6.1 4.8 时的已知问题4”部分。

    这有帮助吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉,这可能与您的问题无关。 0x80.0591万D8是否为RAM位置? 您的堆栈位于何处?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一个CCS版的色情,Humm,这似乎不太可能。
    明天,我会安装6.2 的版本,然后再试一次。

    抱歉,链接有问题?

     processors.wiki.ti.com/.../Using_GCC_with_Tiva_in_CCSv6。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在映射文件中:
    名称 来源 长度 属性
    SRAM_LO 0x402f0000 0x0.04万 xrw
    SRAM_HI 0x402f0400 0x0000fc00 xrw
    OCMC_SRAM 0x4030万 0x1万 xrw
    DDR3 0x8000万 0x400万
    *DEFAULT* 0x0万 0xFFFFFFFF

    堆栈位于DDR3中:

    堆栈 0x8005de90 0x4000
    0x8005de90 __TI_STACK_BASE =。
    0x8005de90 __stack =。
    0x8.0061万e90 。 =(。 +__TI_STACK_SIZE)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不知道为什么在发布时链接不起作用,但如果我将其直接复制到Web浏览器中,链接就会起作用。

    processors.wiki.ti.com/.../Using_GCC_with_Tiva_in_CCSv6
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,它位于DDR3中,但不是堆栈。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,您的链接正常工作。
    我不理解在映射文件中,我有两个堆栈和堆信息:

    第一:
    --------
    ...
    DDR3 0x8000万 0x400万
    *DEFAULT* 0x0万 0xFFFFFFFF

    链接程序脚本和内存映射

    0x0.04万 HEAPSIZE = 0x400
    0x0001c000 STACKSIZE = 0x1c000
    加载./CatStack/SampleApplicationInterface.o
    ...


    秒:
    --------
    ...
    载荷./Axis/masterclass.o
    0x0.4万 __TI_STACK_SIZE = 0x4000
    0x0.4万 __stack_size =__TI_stack_size
    0x0万 __heap_size = 0x0
    加载D:\Projects\Pilotage\6_Products\CNumDsp2015\src\AxisDriver\AM335x_debug\configPkg\package\cfg\AM335x_app_pa8fg.oa8fg
    ...

    明天,我尝试查找他的堆大小是0x400还是0...

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

    您好,

    我们再次关注此主题:使用ccsv6进行调试时,无法在“监视Expressions”窗口中看到类变量。

    我们使用的配置如下:

      • Code Composer Studio 版本CCS 6.1 .................................................................2 (但我们尝试了CCS 6.1 ................................1,这也是同一问题)
      • SYS/BIOS 6.42 .2.29 实时操作系统
      • XDC工具3.31 .2.38_core
      • 编译器GNU v 4.8 4 (Linaro)

    精确地确定我们在C++中的编码非常重要(这很明显,因为我们使用的是类)。

    我们进行了以下测试:

    1我们尝试在另一个使用德州编译器TI v v 5.2 编译的项目中使用C++类,这里非常完美:我们可以看到所有类变量,甚至可以进入子类。

    2我们更新了所有的工具: CCS Linv 7.1 .0与编译器GNU Linaro 4.9 .3。 而且总是有同样的旧问题:看不到类变量。 更糟糕的是:我们看不到动态类或静态类。 我们附上了您在中看到的错误消息。

    我们已经搜索了一个解释来解决此错误(增加堆大小,堆栈大小,更改调试选项...),但没有任何效果!

    我们试图在CCS论坛上找到一些东西,但没有任何东西与我们的问题对应。

    在我看来,我认为问题来自 GNU调试器,因为在使用TI编译器时,调试工作似乎很好。

    是否有人能在这个问题上帮助我们,并给我们任何建议,以便轻松进行调试,因为我们目前陷入困境。

    非常感谢您的帮助!

    Jean-Michel

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

    J am使用CCS版本:6.1 .2.0.0015万 和Sitara处理器。

    我重写我的代码以用C++语言改进它,如果我对它进行调试,就不可能看到类的内容。我根据您的代码为AM335x创建了附加的示例项目。 e2e.ti.com/.../AM335_5F00_GCC_5F00_class_5F00_variables.zip

    该项目使用GNU v 4.9 3编译器。

    在CCS 6.1 MasterPlat.Master下运行3.0.0033万 时,我可以重复您的结果,因为调试器可以显示 m_pMasterPlat.masterValue的值,但不能显示 m_pMaster的内容:

    我用“最新”CCS 7.1 .0.0.0014万 尝试了同一个示例,结果更糟,因为无法显示 m_pMaster或 m_pMasterPlat的内容:

    鉴于CCS 6.1 3到7.1 0的行为发生了变化,我怀疑CCS如何从GNU调试信息中提取类类型的定义存在错误。 希望TI的人员能够进行调查。  

    我还尝试了使用TI ARM编译器编译的示例程序,CCS 7.1 零能够正确显示 m_pMaster和m_pMasterPlat的值。

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

    您好Chester,

    感谢您的帮助,

    是的,我同意您的观点:CCS与GNU调试器之间存在不兼容性,我希望TI的人员能够迅速解决这一问题。

    因为我们 实际上处于死胡同。。。

    此致。

    JM

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我注意到TI的某人尚未为您提供帮助。

    以下内容是否有帮助?
    e2e.ti.com/.../41.5869万
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下内容是否有帮助?
    e2e.ti.com/.../41.5869万

    In,stevenh发现该线程的变通办法是为 DWARF2构建。

    我目前没有Sitara设备,但我修改了以前的测试用例,使其在EK-TM4C129EXL中运行 。e2e.ti.com/.../TM4C_5F00_GCC_5F00_class_5F00_variables.zip 使用CCS 7.0 .0.0.0042万 和GNU编译器v 4.9 .3如果为 DWARF4,DWARF3或 DWARF2编译,我会遇到同样的问题。 为 DWARF2构建时的调试输出示例:

    因此,生成DWARF2无法解决此线程中的问题,即无法在调试器中看到类变量。

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

    您好,

    我们还使用DWARF2进行了测试,我们遇到的问题与Chester完全相同!

    所以,什么都不能解决

    我们可以注意到,CCS v7的问题似乎比CCS v6的问题更严重,因为在我们设法在监视窗口中看到更多内容之前!

    有没有人能给我们一点帮助?

    非常感谢,

    Jean-Michel和Laurence