有時候需要去檢查哪些代碼調用了某些接口,但是經常發生的問題是,某些模塊,實際上看不到代碼,只能看到庫文件。這種情況下,可借助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文章
311瀏覽量
27780 -
虛擬機
+關注
關注
1文章
916瀏覽量
28181 -
gun
+關注
關注
0文章
6瀏覽量
7633
發布評論請先 登錄
相關推薦
評論