Cách đặt các điểm ngắt trên các thư viện được chia sẻ trong tương lai bằng cờ lệnh


93

Tôi đang cố gắng tự động hóa phiên gdb bằng cách sử dụng --commandcờ. Tôi đang cố gắng thiết lập một điểm ngắt trên một hàm trong thư viện được chia sẻ (Unix tương đương với DLL). Cmds.gdb của tôi trông như thế này:

set args /home/shlomi/conf/bugs/kde/font-break.txt
b IA__FcFontMatch
r

Tuy nhiên, tôi nhận được những điều sau:

shlomi: ~ / progs / bug-external / kde / font-break $ gdb --command = cmds.gdb ...
GNU gdb 6.8-2mdv2009.0 (Mandriva Linux phát hành 2009.0)
Bản quyền (C) 2008 Free Software Foundation, Inc.
Giấy phép GPLv3 +: GNU GPL phiên bản 3 trở lên 
Đây là phần mềm miễn phí: bạn có thể tự do thay đổi và phân phối lại nó.
KHÔNG CÓ BẢO HÀNH trong phạm vi pháp luật cho phép. Nhập "hiển thị sao chép"
và "hiển thị bảo hành" để biết chi tiết.
GDB này đã được định cấu hình là "i586-mandriva-linux-gnu" ...
(không tìm thấy ký hiệu gỡ lỗi)
Chức năng "IA__FcFontMatch" không được xác định.
Đặt điểm ngắt đang chờ xử lý khi tải thư viện được chia sẻ trong tương lai? (y hoặc [n]) [trả lời N; đầu vào không phải từ thiết bị đầu cuối]

Vì vậy, nó không thiết lập điểm ngắt. Làm cách nào để đặt mặc định trả lời "y" để đặt các điểm ngắt khi tải thư viện được chia sẻ trong tương lai đang chờ xử lý?

Tôi nhớ lại rằng tôi đã có thể làm điều gì đó, nhưng không thể nhớ lại những gì.


Câu trả lời:


150

Trả lời bản thân, tôi muốn đưa ra câu trả lời mà ai đó đã cho tôi trên IRC:

(gdb) apropos đang chờ xử lý
hành động - Chỉ định các hành động sẽ được thực hiện tại điểm theo dõi
đặt điểm ngắt - Cài đặt cụ thể cho điểm ngắt
đặt điểm ngắt đang chờ xử lý - Đặt hành vi của trình gỡ lỗi liên quan đến điểm ngắt đang chờ xử lý
hiển thị điểm ngắt - Cài đặt cụ thể cho điểm ngắt
hiển thị điểm ngắt đang chờ xử lý - Hiển thị hành vi của trình gỡ lỗi liên quan đến điểm ngắt đang chờ xử lý

Và do đó, đặt breakpoint đang chờ xử lý thực hiện mẹo; nó được sử dụng trong cmds.gdbví dụ như

set breakpoint pending on
break <source file name>:<line number>

đã lưu bacon của tôi cố gắng để gỡ lỗi hệ điều hành Windows 7 sử dụng MinGW, các thiết lập mặc định là khác nhau hơn trên Linux - cảm ơn rất nhiều
bph

Vì một số lý do, tôi nhận được lỗi này Program received signal SIGILL, Illegal instruction. Tôi đang tìm nguồn cung cấp các điểm ngắt từ một tệp và set breakpoint pending onvì một số điểm ngắt của tôi nằm trong thư viện mà chương trình tải. Nếu tôi thêm các điểm ngắt theo cách thủ công, thì không có lỗi. Có ai khác gặp phải vấn đề tương tự không?
breakfoot

@brokenfoot: Tôi nghĩ bạn nên đặt câu hỏi của mình trong một câu hỏi cấp cao nhất mới thay vì trong một nhận xét cho câu trả lời ở đây. Bằng cách đó, nhiều người sẽ chú ý đến nó hơn. Hơn nữa, bạn nên cung cấp thêm thông tin về hệ thống của mình.
Shlomi Fish

11

OT: Trong terminal, nó sẽ giống như thế này để gỡ lỗi Caja trong một dòng:

gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync

2
Trong trường hợp bạn đã tìm thấy công tắc 'cũ' ?, tôi không thể tìm thấy bất kỳ tài liệu tham khảo để tham số này trong tài liệu (nhưng nó hoạt động :))
Gearoid Murphy

-exkhông hiệu quả với tôi. Tôi đã phải đặt các lệnh trong một file tmp và cuộc gọi với:gdb -x /tmp/gdb.commands myexecutible
Jason Moore

5

Không có biểu tượng.

objdump -t /lib/libacl.so
SYMBOL TABLE:
no symbols
objdump -T /lib/libacl.so
...
00002bd0 g    DF .text  000000d0  ACL_1.0     acl_delete_entry
...


(gdb) break 0x0002bd0 

(gdb) x/20i acl_delete_entry
0x2bd0 <acl_delete_entry>:      stwu    r1,-32(r1)
0x2bd4 <acl_delete_entry+4>:    mflr    r0
0x2bd8 <acl_delete_entry+8>:    stw     r29,20(r1)
0x2bdc <acl_delete_entry+12>:   stw     r30,24(r1)
0x2be0 <acl_delete_entry+16>:   mr      r29,r4
0x2be4 <acl_delete_entry+20>:   li      r4,28972
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.