跳轉到內容

GCC 除錯/草稿

來自華夏公益教科書,開放的書籍,開放的世界

新內容\想法測試頁面

可能的書籍指南

[編輯 | 編輯原始碼]

關於本書\什麼是“GCC 除錯”

  • 目標
  • 詳細、易於理解的手冊
  • 涵蓋使用 GCC 進行故障排除
  • 使消除錯誤的過程不那麼痛苦\費時
  • 目標受眾
  • 具有程式語言經驗的新 GCC 使用者
  • 風格
  • 通用語言(不過於技術性)
  • 書籍範圍
  • gcc
  • g++
  • gdb
  • 其他編譯器?

錯誤和警告頁面應包括

  • 詳細解釋錯誤資訊
  • GCC 版本(s) 發現於
  • 早期版本的錯誤資訊?
  • 會導致顯示訊息的示例程式碼
  • 消除故障資訊的修復方法(取決於原因)

錯誤頁面佈局 1

[編輯 | 編輯原始碼]

底部有備註,錯誤原因是級別 2 標題下的級別 3 標題,“原因”

Page Title...

==Causes== 

===<Possible Error Cause>===

<syntaxhighlight lang="cpp">
// source code producing error
</syntaxhighlight>

''' Solutions'''

What to change...
<syntaxhighlight lang="cpp">
// source code fixing error
</syntaxhighlight>

==Notes==
*Message found in gcc versions x.x.x to x.x.x

<noinclude>{{displaytitle|title=Full Error Message}}</noinclude>
{{BookCat}}

例子


頁面標題...

函式呼叫中的引數與任何函式宣告中的引數不匹配

[編輯 | 編輯原始碼]

例如,一個函式“foo”從 main 內部呼叫,它使用一個引數,該引數與任何當前存在的“foo”實現都不完全匹配。

void foo(int x);
void foo(double x);

int main () {
   long x = 5000;
   foo(x);
   ...

解決方案

將引數強制轉換為匹配宣告

int main () {
   long x = 5000;
   foo((int)x);

建立一個新的、過載版本的被呼叫函式以匹配引數

void foo(int x);
void foo(double x);
void foo(long x);

int main () {
   long x = 5000;
   foo(x);

同一個函式被定義了多次

[編輯 | 編輯原始碼]
  • 查詢拼寫錯誤或重複的函式定義/宣告
  • 在 gcc 版本 4.5.1 中發現該訊息


錯誤頁面佈局 2

[編輯 | 編輯原始碼]

頂部有備註,原因是級別 2 標題而不是級別 3 標題

Page Title...

 example of error message
<!-- Make below an info box? -->
'''Found in:''' gcc versions x.x.x to x.x.x

'''Past Versions:''' <!-- If there are any -->
 example of error message
'''Found in:''' gcc versions x.x.x to x.x.x

'''See Also:'''
 similar error messages?

'''Causes:'''

==<Possible Error Cause>==

<syntaxhighlight lang="cpp">
// source code producing error
</syntaxhighlight>

'''Solutions'''

What to change...
<syntaxhighlight lang="cpp">
// source code fixing error
</syntaxhighlight>

<noinclude>{{displaytitle|title=Full Error Message}}</noinclude>
{{BookCat}}

例子


頁面標題...

foo.cpp:23:12 call of overloaded 'foo' is ambiguous
發現於:gcc 版本 x.x.x 到 4.5.1
原因

函式呼叫中的引數與任何函式宣告中的引數不匹配

[編輯 | 編輯原始碼]

例如,一個函式“foo”從 main 內部呼叫,它使用一個引數,該引數與任何當前存在的“foo”實現都不完全匹配。

void foo(int x);
void foo(double x);

int main () {
   long x = 5000;
   foo(x);
   ...

解決方案

將引數強制轉換為匹配宣告

int main () {
   long x = 5000;
   foo((int)x);

建立一個新的、過載版本的被呼叫函式以匹配引數

void foo(int x);
void foo(double x);
void foo(long x);

int main () {
   long x = 5000;
   foo(x);

同一個函式被定義了多次

[編輯 | 編輯原始碼]
  • 查詢拼寫錯誤或重複的函式定義/宣告
華夏公益教科書