2010-01-22 40 views
68

Tôi muốn có gdb ngay lập tức chạy tệp thực thi, như thể tôi đã nhập "chạy" (động lực: Tôi không thích gõ "chạy").gdb - Cách tự động chạy tệp thực thi?

Một cách là ống lệnh để gdb như thế này:

$ echo run | gdb myApp 

Nhưng vấn đề với phương pháp này là bạn bị mất tương tác với gdb, ví dụ. nếu điểm ngắt kích hoạt hoặc myApp sự cố, gdb thoát. Phương pháp này được thảo luận here.

Nhìn vào các tùy chọn trong --help, tôi không thấy cách nào để làm điều này, nhưng có lẽ tôi đang thiếu thứ gì đó.

Trả lời

99
gdb -ex run ./a.out 

Nếu bạn cần phải vượt qua đối số cho a.out:

gdb -ex run --args ./a.out arg1 arg2 ... 

EDIT: Orion nói này không hoạt động trên Mac OSX.

Cờ -ex đã có sẵn từ GDB-6.4 (phát hành năm 2005), nhưng OSX sử dụng nhánh ngã ba của GDB của Apple và XCode mới nhất cho Leopard có chứa GDB 6.3.50-20050815 (Apple version gdb-967), vì vậy bạn đã hết may mắn.

Xây dựng hiện tại GDB-7.0.1 phát hành là một giải pháp khả thi. Chỉ cần chắc chắn đọc this.

+1

cảm ơn câu trả lời. dòng đó hoạt động giống như "gdb ./a.out" cho tôi tho. –

+2

Tôi vừa xác nhận rằng bạn cũng có thể chuyển nhiều tùy chọn -ex trên dòng lệnh và chúng sẽ chạy theo thứ tự trước khi chuyển đầu vào gdb cho bạn. –

+0

Bất cứ ai cũng biết cách thực hiện công việc này trên OSX? – Dave

20

Tôi sẽ sử dụng một gdb-kịch bản:

gdb -x your-script 

nơi của bạn-script chứa một cái gì đó như:

file a.out 
b main 
r 

sau đó bạn có gdb tương tác bình thường nhắc

EDIT:

.210

đây là một tối ưu hóa dành cho người lười:

  1. tiết kiệm kịch bản như .gdbinit trong working directory.
  2. Sau đó bạn chỉ cần chạy gdb như

    gdb

... và gdb tự động tải và thực hiện các nội dung của .gdbinit.

+0

xin cảm ơn câu trả lời. trông giống như những gì tôi muốn ngoại trừ tôi không nhận được dấu nhắc gdb, tôi nhận được gdb bị đình chỉ và tôi trở lại dòng lệnh như thể tôi đã gõ "ctrl-z". nếu tôi "fg", thì hồ sơ gdb và ứng dụng chạy. đây là OS X. –

+0

orion: mmmh - điều đó thật đáng ngạc nhiên đối với tôi. Hoạt động tốt với mọi hương vị UNIX mà tôi đang sử dụng (Linux, Solaris, AIX). Bạn đang sử dụng phiên bản gdb nào? –

+0

tôi chỉ tái verfied hành vi này - vẫn thoát tôi vào dòng lệnh w/gdb đình chỉ.GNU gdb 6.3.50-20050815 (Apple phiên bản gdb-1518) (Sat Feb 12 02:52:12 UTC 2011). –

19
(echo r ; cat) | gdb a.out 

Con mèo cho phép bạn tiếp tục nhập sau khi ngắt gdb.

+0

whoa, tuyệt vời. bạn phải ctrl-c sau khi thoát gdb để ngăn chặn con mèo, nhưng điều đó thật tuyệt. –

+3

Dường như bạn mất một số điều khiển chính trên cá thể gdb bằng cách sử dụng này. –

+0

Hơn nữa, các câu hỏi như 'Tạo điểm ngắt đang chờ xử lý đối với tải thư viện được chia sẻ trong tương lai? (y hoặc [n]) 'sẽ tự động giả định câu trả lời là" Không ". – Ruslan

3

gdb -x <(echo run) --args $program $args

4

bắt đầu là một lựa chọn tốt:

gdb -ex start ./a.out 

Nó giống như chạy, nhưng cũng đặt một breakpoint tạm thời tại main và dừng lại ở đó.

Điểm ngắt tạm thời này bị vô hiệu hóa sau khi bị đánh.

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