2016-07-07 2 views
1

gdb를 사용하여 디버깅하려고합니다. 문자열에 출력을 원한다면 "x/s Ptr"을 사용해야합니다. 그것은 언젠가 잘 작동합니다. 그러나 여러 번 null 값 또는 일부 임의의 숫자 값을 얻고 있습니다. 내 파일에는 10000 줄의 코드가 있습니다. : - p 일부 gdb 출력을 찾으십시오. 예 :gdb로 디버깅 (gdb) "x/s 포인터"출력

krb5_get_credentials_for_user (context=0x59c00eb0, options=4, ccache=0x5a001d40, in_creds=0x5ab022a8, subject_cert=0x0, 
out_creds=0x5ab02378) at test_abc.c:696 
(gdb) x/s 0x59c00eb0 
0x59c00eb0: "$\247\016\227" 
(gdb) x/s 0x5ab022a8 
0x5ab022a8: "" 

누군가이 문제를 해결할 수있는 방법을 알려주시겠습니까? 미리 감사드립니다!

답변

0

... 괜찮습니다. 하지만 여러 번 null 값 즉, "" 또는 임의의 숫자가 표시됩니다 ...

거기에 있었으므로. 당신이 창의적 이도록 격려해주세요.

때때로 디버깅중인 프로그램에서 사용하지 않는 함수 (foo? bar? show? dump?)를 만듭니다. 함수는 종종 c 스타일입니다 (gdb가이를 더 잘 이해하고 간단하게 호출 할 수 있기 때문에), 전역 범위가 간단합니다. 일시적으로이 함수를 close (같은 파일에?)로 설치하면 가끔 가시성을 높이고 싶을 때 도움이됩니다.

그때는 foo는 매개 변수를 전달 할 수와 같은

gdb> p foo 

gdb를 피 명령을 사용하여이 함수를 호출 할 수 있습니다,하지만 난 뭔가를 디버깅하는 코드에 접촉하고있어 경우에, 나는 보통 foo는을 더 많은 능력이 ... 매개 변수가 없을 때 그것은 한 가지를합니다. 또는 아마 더 많이 또는 다르게 표시하도록 전환하는 int 매개 변수 (bar (7))를 사용하십시오.

실험.

이것은 일반적인 것이 아니며 다음 번에 필요할 때까지 기억할 수 있다면 gdb에 대한 더 나은 지식이 도움이 될 것으로 생각됩니다. 때로는 gdb가 이해하지 못하기 때문에 이유를 알 수 없습니다. 다른 때에는 포인터를 추가하고 인쇄하려고합니다.

gdb> p *foobar 
+0

감사합니다. Douglas. 괜찮 았어. 도와 주셔서 감사합니다. – Rock26

2

하지만 여러 번 null 값 또는 일부 임의의 숫자 값이 표시됩니다.

표시 한 내용에는 아무런 문제가 없습니다. 검사중인 메모리 위치가 문자열 (0x59c00eb0)을 가리키고 있지 않거나 빈 문자열 (0x5ab022a8)을 가리키고있는 것입니다.

당신은이 위치 문자열을 가리키는되어야하고, 사실로 (지금 삭제) 주석이 첫 번째 멤버로 매직 넘버를 포함하는, struct _krb5_contextcontext 점을 보여 주었다 증거를 제시하지 않았다. 따라서 검사하려면 x/w을 사용해야합니다.