c - 如何在 C 静态函数上设置 VxWorks 断点?

标签 c static vxworks breakpoints

我在 C 语言的 vxworks 平台上工作。我无法在静态 C 函数上设置断点。事实上,当代码加载到我的卡上时,当我对函数名称执行 lkup 时,找不到它。

如果我使用 nm 和 grep 在可执行文件中查找符号,它看起来与函数名称完全一样。我们正在将代码移植到我们的平台,该平台(正确地)为大量函数使用 static 关键字,但我无法在其中任何一个上设置断点,这很痛苦。

有谁知道为什么我在 lkup 上看不到 C 静态函数以及如何查找它们和设置断点。

最佳答案

假设例程确实如您所料存在(即,没有优化掉或内联)——我在这种情况下使用了几种方法:

程序集断点

  • 假设您想在静态函数 foo() 处设置断点。查找调用 foo() 的代码 - 假设 bar() 调用 foo()。在bar()调用foo()的地方,设置断点。

  • 一直运行,直到遇到 bar() 调用 foo() 的断点。在装配级别的步骤。这应该将您置于 foo() 的第一条指令处。请注意,如果传递了参数,您可能需要逐步执行一些指令 - 希望您知道分支/子例程调用在您的体系结构中是什么样子。

  • 当您到达 foo() 的第一条指令时设置一个汇编断点。

函数指针

我还通过使用 foo() 的地址初始化函数指针来解决这个问题。系统运行时,读取调试器中的函数指针。获取 foo() 的地址。根据这个地址设置断点。

请注意,在这些情况下,您可能没有交错源。

关于c - 如何在 C 静态函数上设置 VxWorks 断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8759737/

相关文章:

c - 在 C 中使用 SHA1

c++ - C++中静态成员作为类类型的用法

c - C 中的套接字创建何时失败?

linux - 所有任务的单一公共(public)地址空间

c - -D_DEFAULT_SOURCE 是做什么的?

c - 将参数传递给 pthread 会导致重复 C

c - 从 fifo 标准输出打印到屏幕失败

java - 有没有办法静态分析plugin.xml的引用

c++ - 如何将模板类的静态成员变量声明/定义/初始化为类的静态成员变量?

c++ - 如何在vxworks上的c/c++中获取带有日期的系统时间(以毫秒为单位)