zoukankan      html  css  js  c++  java
  • C语言调试的几种方法

    linux系统下,在不gdb调试的情况下,我们如何解决程序崩溃问题呢?首先想到的就是添加log日志信息,其次还有以下几种方法可以帮助我们分析存在的问题:

    (一)add2line

      程序崩溃时会打出一些崩溃地方的地址空间,可以使用此方法显示崩溃地方对应的函数或者某一行,使用方法如下:

      echo "0x63d8a9" | addr2line -e bin/httpd -f  : 崩溃查对应代码行

    (二)把出错时的堆栈信息打印出来,类似gdb调试中bt功能。

    #define BACKTRACE() 
        do {    
            void*   array[20];  
            size_t  size;       
            char**  strings;    
            size_t  i;          
            size = backtrace(array, 20); 
            strings = backtrace_symbols(array, size); 
            for (i=0; i< size; i++) { 
                printf("%s
    ", strings[i]); 
            } 
            free(strings);      
        } while(0)
    
    static void signal_handler(int sig)
    {
        switch(sig)
        {
            case SIGSEGV: /* segmentation fault */
            case SIGFPE:  /* erroneous arithmetic operation */
            case SIGBUS:  /* bus error */
                BACKTRACE();
                exit(EXIT_FAILURE);
                break;
            default:
                break;
        }
    }
    
    int main()
    {
        signal(SIGSEGV, signal_handler);
        signal(SIGFPE,  signal_handler);
        signal(SIGBUS,  signal_handler);
    }

        

    参考:

    1、http://www.justcodeit.info/

  • 相关阅读:
    1-4-04:奇偶ASCII值判断
    1-4-03:奇偶数判断
    1-4-02:输出绝对值
    1-4-01:判断数正负
    1-3-20:计算2的幂
    1-3-19:A*B问题
    1-3-18:计算三角形面积
    Use PIVOT Table in SQL Server
    Pivoting DataTable Simplified
    Pivot Methods 行列转换
  • 原文地址:https://www.cnblogs.com/tibetanmastiff/p/3090384.html
Copyright © 2011-2022 走看看