我在 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/