IT story

명령 플래그를 사용하여 향후 공유 라이브러리에 중단 점을 설정하는 방법

hot-time 2020. 9. 7. 21:23
반응형

명령 플래그를 사용하여 향후 공유 라이브러리에 중단 점을 설정하는 방법


--command플래그를 사용하여 gdb 세션을 자동화하려고합니다 . 공유 라이브러리의 함수 (DLL에 해당하는 Unix)에 중단 점을 설정하려고합니다. 내 cmds.gdb는 다음과 같습니다.

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

그러나 다음을 얻습니다.

shlomi : ~ / progs / bugs-external / kde / font-breaking $ gdb --command = cmds.gdb ...
GNU gdb 6.8-2mdv2009.0 (Mandriva Linux 릴리스 2009.0)
저작권 (C) 2008 Free Software Foundation, Inc.
라이선스 GPLv3 + : GNU GPL 버전 3 이상 
이것은 무료 소프트웨어입니다. 자유롭게 변경하고 재배포 할 수 있습니다.
법률이 허용하는 범위까지 보증은 없습니다. "복사 표시"를 입력합니다.
자세한 내용은 "보증 표시"를 참조하십시오.
이 GDB는 "i586-mandriva-linux-gnu"로 구성되었습니다.
(디버깅 기호가 없음)
"IA__FcFontMatch"함수가 정의되지 않았습니다.
향후 공유 라이브러리로드시 중단 점을 보류 하시겠습니까? (y 또는 [n]) [답변 N; 터미널에서 입력하지 않음]

따라서 결국 중단 점을 설정하지 않습니다. 보류중인 향후 공유 라이브러리로드에 중단 점을 설정하기 위해 기본적으로 "y"로 응답하도록하려면 어떻게해야합니까?

나는 내가 무언가를 할 수 있었다는 것을 기억하지만 무엇을 기억할 수 없다.


나 자신에게 답장을 보내면서 IRC에서 누군가 나에게 준 답을 드리고 싶습니다.

(gdb) apropos pending
actions-추적 점에서 수행 할 작업을 지정합니다.
중단 점 설정-중단 점 특정 설정
중단 점 보류 설정-보류 중단 점에 관한 디버거의 동작을 설정합니다.
show breakpoint-중단 점 특정 설정
중단 점 보류 표시-보류 중단 점에 대한 디버거의 동작을 표시합니다.

그래서 set breakpoint 는 트릭을합니다. 그것은 cmds.gdb같이 사용됩니다.

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

OT : 터미널에서 Caja를 한 줄로 디버그하는 것은 다음과 같습니다.

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

기호가 없습니다.

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

참고 URL : https://stackoverflow.com/questions/100444/how-to-set-breakpoints-on-future-shared-libraries-with-a-command-flag

반응형