首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Lauterbach (Trace32)进行调试

使用Lauterbach (Trace32)进行调试
EN

Stack Overflow用户
提问于 2009-10-06 08:07:07
回答 4查看 5.7K关注 0票数 3

在使用跟踪时,我发现源代码中没有列出一些函数,而是试图找到它们以放置断点。只有当我以程序集格式查看源时,这些函数才会出现。

我和我的高年级学生谈过,他们告诉我,如果任何函数只被调用一次,那么它将由Trace优化,并以内联的形式出现,因此可以在汇编中看到。

我的问题是:

  1. 这种优化是如何通过Lauterbach实现的?
  2. 这有好处吗??
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-08 11:28:45

有几件事:

  1. 关于语句,我发现源代码中没有列出几个函数,同时试图找到它们以放置断点“,只需检查Mapping /Map文件,它由构建中使用的不同函数组成,它们在内存中的位置等等,如果您在那里找不到您的函数,只需要查看优化,这可能是问题所在。
  2. 正如正确指出的,优化不是由Lauterbach完成的,而是由编译器完成的。通常,ARM中有不同的优化级别,我们有O0-O2,其中O0是可能的最高优化级别,但这只应该在发布到客户时使用,否则优化级别O2应该用于调试。
  3. 如果您觉得编译器可能对函数进行了优化,请尝试将其设置为易失性
  4. 另一点可能与此没有直接关系,但可能有帮助,那就是知道“内存中的哪个区域是您的文件所在”,因为很多次,当您想调试某些东西,并且Page仍然不在RAM中时,您将无法在该页基本上在RAM中被占用时才能放置断点,比如,如果系统中有按需分页的话。

希望这能有所帮助。

-hjsblogger

票数 5
EN

Stack Overflow用户

发布于 2009-10-06 21:40:33

优化是由编译器完成的,而不是由劳特巴赫完成的。编译器试图优化其汇编语言输出,默认设置通常只调用一次内联函数。

要为测试目的覆盖这些优化,可以使用编译器标志--no

票数 4
EN

Stack Overflow用户

发布于 2009-10-06 10:46:18

内联只能由编译器调用一次的函数。

它的优点是节省了函数调用的开销(运行时、代码空间和堆栈空间),您仍然可以将代码以模块化的方式编写成几个函数。

缺点是调试变得更加困难,因为在调试过程中,函数与调用者混淆了。

W.r.t.您的跟踪工具的行为您的问题是相当不清楚的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1524210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档