Debug 集子[更新中]

一、錯誤:‘start’ 的存儲大小未知

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

這兩個頭文件可以把錯誤與警告消除

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

編譯時起碼把下面的選項加上,沒有壞處

gcc -g -O2 –Wall

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

二、warning: braces around scalar initializer

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!

三、excess elements in array initializer

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

四、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

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

原因分析: 
    跨文件 函數 使用 未聲明, 加上  #include "PublicFunction.h" 即可

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

六、/lib/libc.so.6: version `GLIBC_2.9’ not found

[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

七、 implicit declaration of function

原因分析: 在函數所在的c文件中定義了,但是沒有在與之相關聯的.h文件中聲明
解決方案:
     1、添加 .h 文件;
     2、extern 該函數;

八、warning:ISO C90 forbids mixed declarations and code

原因分析:

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

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

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

# ./Dvr
./Dvr: can't load library 'libmpi.so'
原因分析: 所需要的庫文件未加載
解決方案:
  1、將所需要的庫文件添加到 /usr/lib 下;
  2、編輯 /etc/profile,添加所需要的庫文件路徑

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



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

十、內存泄漏

# MMB LEAK(pid=894): 0x8A613000, 249856 bytes, ''mmz_userdev_release: mmb<0x8A613000> mapped to userspace 0x4054f000 will be force unmaped!
Segmentation fault
原因分析: 非法訪問內存
解決方案:
  1、添加打印信息,定位出錯位置;
  2、出錯位置是 創建線程函數,檢查 傳參,發現參數僅 定義,未 malloc 分配內存;
  3、分配內存 + 在調用函數中free相應的內存,debug OK!

十一、incompatible implicit declaration

# warning: incompatible implicit declaration of built-in function 'exit'
原因分析: 缺少相應的頭文件
解決方案:

  1、添加#include <stdlib.h> 即可

十二、 warning:suggest parentheses around ‘+’ inside ‘<<’

原因分析: 符號優先級
解決方案:
1、將 << 表達式 添加 () 即可; 
//////////// 位移操作一定要加括號!!!!! 20171018 補記

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

十三、warning: suggest parentheses around assignment used as truth value

原因分析: if (atype=search(alphatp,1))
  在C語言中 非0代表TRUE ,反之爲FALSE。 atype值是用於最後的判斷用的,但是由於長期的編程實踐告訴我們, 人們經常在“=”和“==”的使用上出現手誤,所以gcc編譯器爲此要求我們明確地告訴編譯器它“=”而不是“==”
解決方案:
  1、添加一對 () 即可
   if (( atype=search(alphatp,1) ))

十四、warning ‘XXX’ declared ‘static’ but never defined

原因分析: static 關鍵字 表明該函數OR變量僅僅在當前文件內使用
解決方案:
  1、函數OR變量僅僅在 .c 文件中聲明,因爲在.h中聲明時,其他文件引用該.h時候會包含該函數;

十五、warning: unused parameter

原因分析: 參數聲明但未使用
解決方案:
  1、void fun(int a)
   {
  a = a;
    }
    
  2、
    #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))

十六、error: expected specifier-qualifier-list before ‘u8’

原因分析:  自定義的類別 未找到定義
解決方案:

  1、u8  ---> unsigned char , 改爲 系統定義的類型名即可;

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

十七、warning: missing initializer

  warning: (near initialization for 'DEV_ATTR_BT656D1_4MUX.enDataSeq')
原因分析: 結構體成員變量在初始化賦值的過程中,僅僅對部分變量賦值
解決方案:
  1、嚴格按照結構體定義對每一項成員變量進行賦值, 包括數組成員變量的{}也需要一致;

2015年4月21日星期二 16:34:45

十八、 warning: extra tokens at end of #ifndef directive

原因分析: 搜索相關資料,得知 don't put text behind the #endif

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

十九、找不到 動態庫/靜態庫文件

# warning: implicit declaration of function
原因分析: 該函數的文件頭文件( .h) 未在出錯文件中添加
解決方案:
  添加所缺的.h 頭文件即可;
十九、 cannot find -lqte
原因分析: 查看打印信息,發現庫文件的 路徑指定錯誤
解決方案:
  1、檢查 /etc/profile 文件, 修正環境變量即可

二十、undefined reference to `setRtspBandwidth’

原因:修改了函數參數後,沒有及時更新.h的聲明

// xxx.h
void setRtspBandwidth ( int usrBandwidth );


// xxx.c
void setRtspBandwidth ( unsigned int usrBandwidthInBit )
{
}

發佈了108 篇原創文章 · 獲贊 66 · 訪問量 56萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章