linux C++中输出debug和trace信息

简介:

     (这里指LINUX G++环境)

一,三个重要的宏:

1 __LINE__ 当前的行号

2 __FILE__ 当前的文件名(xxx.cpp)

3 __PRETTY_FUNCTION__/__FUNCTION__ 带签名和不带签名的函数名

 

二,打印stack trace

通过两个函数:

backtrace();

backtrace_symbols();

需要 -g -rdynamic 参数

 
  1. #include  <stdio.h> 
  2. #include  <exception> 
  3. #include    "string.h" 
  4. #include    "stdlib.h" 
  5. #include  <execinfo.h> 
  6.  
  7. void print_trace(); 
  8. void test(); 
  9.  
  10. void print_trace (void
  11.     void *array[10]; 
  12.     size_t size; 
  13.     char **strings; 
  14.     size_t i; 
  15.  
  16.     size = backtrace (array, 10); 
  17.     strings = backtrace_symbols (array, size); 
  18.  
  19.     printf ("Obtained %zd stack frames.\n", size); 
  20.  
  21.     for (i = 0; i < size; i++) 
  22.         printf ("%s\n", strings[i]); 
  23.  
  24.     free (strings); 
  25.  
  26. void test() 
  27.     print_trace(); 
  28.  
  29. int main(int argc, char *argv[]) 
  30.     printf("%d\n", __LINE__); 
  31.     printf("%s\n", __FILE__); 
  32.     printf("%s\n", __PRETTY_FUNCTION__); 
  33.  
  34.     test(); 
  35.     return 0; 

 

编译和输出

:!g++ -Wall -g -rdynamic ddd.cpp;./a.out

35

ddd.cpp

int main(int, char**)

Obtained 5 stack frames.

./a.out(_Z11print_tracev+0x16) [0x40090e]

./a.out(_Z4testv+0x9) [0x40098d]

./a.out(main+0x50) [0x4009e0]

/lib64/tls/libc.so.6(__libc_start_main+0xdb) [0x302af1c4bb]

./a.out(__gxx_personality_v0+0x42) [0x40086a]



本文转自 dogegg250 51CTO博客,原文链接:http://blog.51cto.com/jianshusoft/855110,如需转载请自行联系原作者


相关文章
|
12天前
|
缓存 监控 Linux
|
3月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
1月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
272 3
|
19天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
1月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
206 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
2月前
|
算法 数据安全/隐私保护 C++
超级好用的C++实用库之MD5信息摘要算法
超级好用的C++实用库之MD5信息摘要算法
68 0
|
3月前
|
监控 安全 Linux
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
|
2月前
|
Linux API 开发工具
Linux内核开发流程指南 - 8. 获取更多信息【ChatGPT】
Linux内核开发流程指南 - 8. 获取更多信息【ChatGPT】
|
3月前
|
监控 Linux
在Linux中,有⼀个脚本运行时间可能超过2天,如何做才能使其不间断的运行,而且还可以随时观察脚本运行时的输出信息?
在Linux中,有⼀个脚本运行时间可能超过2天,如何做才能使其不间断的运行,而且还可以随时观察脚本运行时的输出信息?
|
7天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
33 4