2010-01-15 43 views
10

Tôi cố gắng để thêm một breakpoint trong chương trình của tôi sử dụngLàm cách nào để gỡ lỗi bằng gdb?

b {line number} 

nhưng tôi luôn nhận được một lỗi nói rằng:

No symbol table is loaded. Use the "file" command. 

Tôi nên làm gì?

+1

http://www.yolinux.com/TUTORIALS/GDB-Commands.html đây là một gdb tờ lệnh tốt. Bạn sẽ tìm thấy tất cả mọi thứ bạn cần biết về gdb. – Phong

Trả lời

22

Đây là hướng dẫn bắt đầu nhanh cho gdb:

/* test.c */ 
/* Sample program to debug. */ 
#include <stdio.h> 
#include <stdlib.h> 

int 
main (int argc, char **argv) 
{ 
    if (argc != 3) 
    return 1; 
    int a = atoi (argv[1]); 
    int b = atoi (argv[2]); 
    int c = a + b; 
    printf ("%d\n", c); 
    return 0; 
} 

Co mpile với các tùy chọn -g:

gcc -g -o test test.c 

tải thực thi, mà bây giờ chứa những biểu tượng gỡ lỗi, vào gdb:

gdb --annotate=3 test.exe 

Bây giờ bạn nên tìm cho mình tại dấu nhắc gdb. Ở đó bạn có thể ra lệnh cho gdb. Giả sử bạn muốn đặt một breakpoint tại dòng 11 và bước qua việc thực hiện, in ấn các giá trị của các biến địa phương - các chuỗi lệnh sau đây sẽ giúp bạn làm điều này:

(gdb) break test.c:11 
Breakpoint 1 at 0x401329: file test.c, line 11. 
(gdb) set args 10 20 
(gdb) run 
Starting program: c:\Documents and Settings\VMathew\Desktop/test.exe 10 20 
[New thread 3824.0x8e8] 

Breakpoint 1, main (argc=3, argv=0x3d5a90) at test.c:11 
(gdb) n 
(gdb) print a 
$1 = 10 
(gdb) n 
(gdb) print b 
$2 = 20 
(gdb) n 
(gdb) print c 
$3 = 30 
(gdb) c 
Continuing. 
30 

Program exited normally. 
(gdb) 

Nói tóm lại, các lệnh sau đây là tất cả bạn cần bắt đầu sử dụng gdb:

break file:lineno - sets a breakpoint in the file at lineno. 
set args - sets the command line arguments. 
run - executes the debugged program with the given command line arguments. 
next (n) and step (s) - step program and step program until it 
         reaches a different source line, respectively. 
print - prints a local variable 
bt - print backtrace of all stack frames 
c - continue execution. 

Nhập trợ giúp tại dấu nhắc (gdb) để nhận danh sách và mô tả tất cả các lệnh hợp lệ.

4

Bắt đầu gdb với thực thi như một tham số, vì vậy mà nó biết mà chương trình bạn muốn gỡ lỗi:

gdb ./myprogram 

Sau đó, bạn sẽ có thể đặt breakpoint. Ví dụ:

b myfile.cpp:25 
b some_function 
+4

và đừng quên biên dịch với thông tin gỡ lỗi (gcc có tham số "-g"). – wilhelmtell

2

Bạn cần phải nói với gdb tên của tập tin thực thi của bạn, hoặc khi bạn chạy gdb hoặc sử dụng lệnh file:

$ gdb a.out 

hoặc

(gdb) file a.out 
2

Đảm bảo bạn đã sử dụng tùy chọn -g khi biên dịch.

-1

Bạn cần sử dụng tùy chọn -g hoặc -ggdb tại thời gian biên dịch chương trình của bạn.

Ví dụ: gcc -ggdb file_name.c ; gdb ./a.out

Các vấn đề liên quan