programing

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

javaba 2022. 7. 28. 23:25
반응형

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

gdb 세션을 자동화하려고 합니다.--commandflag. 공유 라이브러리(DLL과 동등한 Unix)의 함수에 중단점을 설정하려고 합니다.내 cmds.gdb는 다음과 같습니다.

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

단, 다음과 같은 정보를 얻을 수 있습니다.

shlomi:~/progs/syslog-syslog/syslog-b --command=cmds.gdb...
GNU gdb 6.8-2mdv2009.0 (Mandriva Linux 릴리즈 2009.0)Copyright (C) 2008 Free Software Foundation, Inc.라이선스 GPLv3+: GNU GPL 버전3 이후이것은 무료 소프트웨어입니다.변경 및 재배포는 자유입니다.
법에 의해 허용된 범위 내에서 보증은 없습니다."show copying"을 입력합니다.자세한 내용은 "보증서 제시"를 참조하십시오.
이 GDB는 "i586-mandriva-linux-gnu"로 구성되었습니다.
(디버깅 기호를 찾을 수 없습니다.)기능 "IA__FcFontMatch"가 정의되지 않았습니다.
향후 공유 라이브러리 로드 시 중단점을 보류하시겠습니까?(y 또는 [n]) [응답한N, 단말기가 아닌 입력]

결국 브레이크포인트를 설정하지 않는군요.향후 보류 중인 공유 라이브러리의 로드에 대해 중단점을 설정하기 위해 "y"라고 대답하는 것을 디폴트로 하려면 어떻게 해야 합니까?

뭔가 할 수 있었던 것은 기억하지만, 무엇이 생각나지 않는다.

IRC에 대해 누군가가 나에게 준 답변을 하고 싶다.

(gdb) apropos 보류 중actions - 트레이스 포인트에서 수행할 액션을 지정합니다.중단점 설정 - 중단점별 설정중단점 보류 설정 - 보류 중인 중단점에 대한 디버거 동작을 설정합니다.show breakpoint - 중단점별 설정show breakpoint pending - 보류 중인 중단점에 대한 디버거 동작을 표시합니다.

따라서 보류 중인 브레이크 포인트를 설정하면 문제가 해결됩니다.이 브레이크 포인트는 에서 사용됩니다.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

반응형