有时候需要去检查哪些代码调用了某些接口,但是经常发生的问题是,某些模块,实际上看不到代码,只能看到库文件。这种情况下,可借助GNU工具来检查。
先写个简单的测试代码:
$ cat PCString.h
#ifndef __PCSTRING_H__
#define __PCSTRING_H__
class PCString
{
public:
static bool Copy(const char *from, char *to, int size);
};
#endif //__PCSTRING_H__
$ cat PCString.cpp
#include “PCString.h”
bool PCString::Copy(const char *from, char *to, int size)
{
}
g++ -g -c PCString.cpp -o PCString.o
ar -rsv libPCString.a PCString.o
$ cat test2.cpp
#include “PCString.h”
void fun(void)
{
char test[10];
PCString::Copy(“AAAA”, test, 10);
}
g++ test2.cpp -g -c -o test.o
ar -rsv libTest.a test.o
假如,我们要检查哪些地方调用了 PCString::Copy(), 但是又看不到test2.cpp文件,只能看到 libTest.a。
1)使用 readelf:

2)使用 nm

3)如果 库文件是 debug版的(可以反汇编出源码),也可以用 objdump:

另外,这些工具也可以查询某个模块定义哪些可供外部使用的符号。
-
工具
+关注
关注
4文章
317浏览量
28736 -
虚拟机
+关注
关注
1文章
968浏览量
30178 -
gun
+关注
关注
0文章
6浏览量
7715
发布评论请先 登录
无法在Armv7l树莓派3b+上运行binutils-esp32ulp工具链怎么解决?
关于typedef的用法总结
查询Linux应用程序运行依赖哪些库的方法
学习ARM反汇编工具objdump和一个简单实例 精选资料分享
OK3399开发板的程序的库依赖关系是什么?
总结一下STM32串口的用法
enum的用法总结
Java数组的常用方法_Java:数组工具类Arrays类的常用方法的用法及代码
Linux后台开发常用调试工具
用于查看目标文件或可执行文件的组成信息的命令:objdump命令

readelf,nm, objdump工具使用的用法和总结
评论