Debug 集子



1、編程

001.c: 在函數 ‘main’ 中:
001.c:8: 錯誤:‘start’ 的存儲大小未知
001.c:9: 錯誤:‘end’ 的存儲大小未知

數組


=========================app

#include <arpa/inet.h>
#include <netinet/in.h>




這兩個頭文件能夠把錯誤與警告消除
#include <arpa/inet.h>
#include <netinet/in.h> 


編譯時起碼把下面的選項加上,沒有壞處
gcc -g -O2 -Wall
ide


http://blog.csdn.net/susubuhui/article/details/8272397              
函數


=====================================================================================================ui

2、編碼

menu.c:1184: warning: braces around scalar initializer
menu.c:1184: warning: (near initialization for 'list0[120]')
menu.c:1184: warning: excess elements in scalar initializer
menu.c:1184: warning: (near initialization for 'list0[120]')

===============
今天編譯程序的時候也 出現這樣的錯誤, 最後發現是 .h文件中 亂入 幾個字符,改正後編譯OK!

spa


3、.net

menu.c:1366: warning: excess elements in array initializer
menu.c:1366: warning: (near initialization for 'list0')
menu.c:1375: warning: excess elements in array initializer
menu.c:1375: warning: (near initialization for 'list0')

線程

===============

        list0[]  下標 個數 不匹配,



=========================2014年10月20日星期一  16:02:30==========================

4、warning: pointer targets in passing argument 1 of 'Sound6188' differ in signedness


緣由分析:

         指針所指的符號不一致,在GCC裏,unsigned char *,signed char *和char *是不一樣的類型,若是相互賦值會有警告

         void LCD_write_str(uchar X,uchar Y,uchar *s);第三個參數類型是unsigned char *

         而:LCD_write_str(0,0,"abcdefg");第三個參數"abcdefg"類型是char *,

         把char *轉遞給unsigned char *,發生了數據類型不匹配的問題,所以產生了警告。



=========================2014年12月22日星期一  14:02:30==========================

5、incompatible types in assignment  參數類型不兼容


緣由分析:   跨文件 函數 使用 未聲明, 加上  #include "PublicFunction.h" 便可


=========================2015年2月10日星期二  17:02:30==========================

6、

[root@localhost Download]# ./QIpmsg 
./QIpmsg: /lib/libc.so.6: version `GLIBC_2.9' not found (required by ./QIpmsg)
./QIpmsg: /lib/libc.so.6: version `GLIBC_2.15' not found (required by ./QIpmsg)
./QIpmsg: /lib/libc.so.6: version `GLIBC_2.10' not found (required by ./QIpmsg)
./QIpmsg: /lib/libc.so.6: version `GLIBC_2.11' not found (required by ./QIpmsg)
./QIpmsg: /lib/libc.so.6: version `GLIBC_2.7' not found (required by ./QIpmsg)
[root@localhost Download]# 


[root@localhost Download]# rpm -qi glibc
Name        : glibc                        Relocations: (not relocatable)
Version     : 2.6                               Vendor: Koji
Release     : 3                             Build Date: 2007年05月24日 星期四 19時23分26秒
Install Date: 2014年03月07日 星期五 09時27分40秒      Build Host: xenbuilder2.fedora.redhat.com
Group       : System Environment/Libraries   Source RPM: glibc-2.6-3.src.rpm
Size        : 12868833                         License: LGPL
Signature   : DSA/SHA1, 2007年05月25日 星期五 02時29分03秒, Key ID b44269d04f2a6fd2
Packager    : Koji
Summary     : GNU libc 庫。
Description :
glibc 軟件包包括在系統上被多個程序使用的標準庫。
爲了要節省磁盤空間和內存,以及簡化升級進程,
公用的系統編碼被保留在一處,在程序間共享。這個
軟件包包括幾組最重要的共享庫:標準的 C 庫和標準
的數學庫。沒有這兩個庫,Linux 系統將沒法操做。
 
 
[root@localhost Download]# yum -y update glibc
Loading "installonlyn" plugin
Setting up Update Process


緣由分析: glibc 版本太低;





========================= 2015年3月20日星期五  17:05:00 ==========================

7、 implicit declaration of function  


緣由分析:  在函數所在的c文件中定義了,可是沒有在與之相關聯的.h文件中聲明
解決方案:

                  一、添加 .h 文件;

                  二、extern 該函數;



 8、warning:ISO C90 forbids mixed declarations and code


緣由分析:  

         變量定義以前任何一條非變量定義的語句(重視:語句是會帶分號的)都會引發這個警告! 將非變量的定義移到變量定義以後 便可,也就是變量的聲明 必須在執行語句以前。



========================= 2015年3月30日星期一, 10:00:09 ==========================

8、找不到 動態庫/靜態庫文件

# ./Dvr 
./Dvr: can't load library 'libmpi.so'


緣由分析:  所須要的庫文件未加載
解決方案:

            一、將所須要的庫文件添加到 /usr/lib 下;

            二、編輯 /etc/profile,添加所須要的庫文件路徑

       LD_LIBRARY_PATH="/sdcard/mpp/lib_hi3520A:/usr/local/lib:/usr/lib";



========================= 2015年4月8日星期三 17:49:08 ==========================

9、找不到 動態庫/靜態庫文件

#  warning: implicit declaration of function


緣由分析:  該函數的文件頭文件( .h) 未在出錯文件中添加
解決方案:

            添加所缺的.h 頭文件便可;



========================= ========================= 2015年4月9日星期四 17:55:17  ==========================

10、內存泄漏

#  MMB LEAK(pid=894): 0x8A613000, 249856 bytes, ''mmz_userdev_release: mmb<0x8A613000> mapped to userspace 0x4054f000 will be force unmaped!
Segmentation fault


緣由分析:  非法訪問內存
解決方案:

            一、添加打印信息,定位出錯位置;

            二、出錯位置是 建立線程函數,檢查 傳參,發現參數僅 定義,未 malloc 分配內存;

            三、分配內存 + 在調用函數中free相應的內存,debug OK!


11、incompatible implicit declaration

#  warning: incompatible implicit declaration of built-in function 'exit'


緣由分析:  缺乏相應的頭文件
解決方案:

            一、添加#include <stdlib.h> 便可 


12、 符號優先級

# warning:suggest parentheses around '+' inside '<<'


緣由分析:  符號優先級
解決方案:

            一、將 << 表達式 添加 () 便可;




12、 找不到 庫文件

#  ....  cannot find -lqte


緣由分析:  查看打印信息,發現庫文件的 路徑指定錯誤
解決方案:

            一、檢查 /etc/profile  文件, 修正環境變量便可




================================================== 2015年4月13日星期一, 09:32:07  ==========================

十3、二次確認 " = "

#  warning: suggest parentheses around assignment used as truth value 


緣由分析:  if (atype=search(alphatp,1))

            在C語言中 非0表明TRUE ,反之爲FALSE。 atype值是用於最後的判斷用的,可是因爲長期的編程實踐告訴咱們, 人們常常在「=」和「==」的使用上出現手誤,因此gcc編譯器爲此要求咱們明確地告訴編譯器它「=」而不是「==」


解決方案:

            一、添加一對 () 便可

               if (( atype=search(alphatp,1) ))




十4、static 關鍵字

#  warning 'XXX' declared 'static' but never defined

緣由分析:  static 關鍵字 代表該函數OR變量僅僅在當前文件內使用

解決方案:

            一、函數OR變量僅僅在  .c  文件中聲明,由於在.h中聲明時,其餘文件引用該.h時候會包含該函數;




十5、warning: unused parameter 

#  warning: unused parameter 

緣由分析:  參數聲明但未使用

解決方案:

            一、void fun(int a)

               {

                    a = a;

                }


            二、

                #ifdef UNUSED
                #elif defined(__GNUC__)
                # define UNUSED(x) UNUSED_ ## x __attribute__((unused))
                #elif defined(__LCLINT__)
                # define UNUSED(x) /*@unused@*/ x
                #else
                # define UNUSED(x) x
                #endif


                void dcc_mon_siginfo_handler(int UNUSED(whatsig)) 



十5、expected specifier-qualifier-list

#  error: expected specifier-qualifier-list before ‘u8’

緣由分析:   自定義的類別 未找到定義

解決方案:

            一、u8   --->  unsigned char  , 改成 系統定義的類型名便可;




==================================================  2015年4月14日星期二  13:34:45  ==========================

十6、結構體成員變量爲徹底初始化

#  warning: missing initializer
    warning: (near initialization for 'DEV_ATTR_BT656D1_4MUX.enDataSeq')


緣由分析:  結構體成員變量在初始化賦值的過程當中,僅僅對部分變量賦值


解決方案:

            一、嚴格按照結構體定義對每一項成員變量進行賦值, 包括數組成員變量的{}也須要一致;
相關文章
相關標籤/搜索