免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
通過編程方式獲取backtrace
在用GDB調(diào)試器時(shí)可以查看所謂的Backtrace,它包含一系列的函數(shù)調(diào)用信息,用命令backtrace或bt可以在GDB中查看函數(shù)調(diào)用棧的信息。有些場(chǎng)合沒法使用GDB時(shí),則可以用glibc庫函數(shù)中的一些相關(guān)函數(shù)來得到backtrace的信息(在頭文件execinfo.h中):
// 獲取將backstrace信息,將地址存到buffer中。
// 參數(shù)size指定buffer的最大值,返回值則是backstrace的實(shí)際大小
int backtrace (void **buffer, int size)
// 根據(jù)buffer指定的地址,返回符號(hào)信息。參數(shù)size指定返回符號(hào)信息的大小
char ** backtrace_symbols (void *const *buffer, int size)
// 類似backtrace_symbols()函數(shù),但是不需要malloc空間來存放符號(hào)信息,
// 而是將結(jié)果寫到文件描述符fd所代表的文件中
void backtrace_symbols_fd (void *const *buffer, int size, int fd)
使用函數(shù)backtrace_symbols()或者backtrace_symbols_fd()時(shí),需要用-rdynamic編譯才能得到正確的符號(hào)名,否則只能得到偏移地址。
下面的示例代碼應(yīng)用了backtrace()和backtrace_symbols()函數(shù)來打印backtrace的信息:
1  #include <execinfo.h>
2  #include <stdio.h>
3  #include <stdlib.h>
4
5
6  void print_trace (void)
7  {
8    void *array[10];
9    size_t size;
10    char **strings;
11    size_t i;
12
13    size = backtrace (array, 10);
14    strings = backtrace_symbols (array, size);
15
16    printf ("Obtained %zd stack frames.\n", size);
17
18    for (i = 0; i < size; i++)
19       printf ("%s\n", strings[i]);
20
21    free (strings);
22  }
23
24
25  void dummy_function (void)
26  {
27    print_trace ();
28  }
29
30  int main (void)
31  {
32    dummy_function ();
33    return 0;
34  }
編譯運(yùn)行的結(jié)果如下:
# gcc bt.c -rdynamic -o bt
# ./bt
Obtained 5 stack frames.
./bt(print_trace+0x14) [0x80486e4]
./bt(dummy_function+0xb) [0x8048765]
./bt(main+0x15) [0x 804877c]
/lib/tls/libc.so.6(__libc_start_main+0xe4) [0x42015574]
./bt(backtrace_symbols+0x31) [0x8048641]
你可以應(yīng)用這些函數(shù)在程序異常退出時(shí)打印backtrace或?qū)⑺4娴侥硞€(gè)文件中,用于之后的分析。更詳細(xì)的介紹可以參考http://www.linuxjournal.com/article/6391。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
嵌入式C代碼調(diào)試?yán)?--backtrace
每天進(jìn)步一點(diǎn)點(diǎn)
在Linux中打印函數(shù)調(diào)用堆棧
在C/C++程序里打印調(diào)用棧信息
嵌入式段錯(cuò)誤的3種調(diào)試方法匯總!
巧用backtrace系列函數(shù),在不具備gdb環(huán)境的Linux系統(tǒng)上大致定位...
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服