보통 프로세스가 죽고나서 dump된 core 파일을 보다보니
그때마다 사용하는 명령어를 매번 검색해서 찾기가 불편하여
이곳에 모아서 보려함.
* GDB 명령어
2017.12.29
심볼 테이블에 대해 확인하기 위한 명령어 예시
구조체 안의 정보를 찾아서 확인한다고 봐도 될 것 같다.
(gdb) bt
(gdb) frame 9
#9 0x00002b459abc0e5f in test_GenCancelTrct (pStParser=0x7bb3590, pStTrct=0x2aab1a951e50) at test_Utility.c:834
834 test_Utility.c: 그런 파일이나 디렉토리가 없음.
in test_Utility.c
(gdb) whatis pStTrct
type = stTrct_t *
(gdb) ptype pStTrct
type = struct _stTrct_t {
...
test_common_msg_t *pStRequest;
...
} *
(gdb) ptype pStTrct->pStRequest
type = struct {
...
test_parsed_msg_t *test_parsed_msg;
...
} *
(gdb) ptype pStTrct->pStRequest->test_parsed_msg
type = struct {
...
test_header_index_t test_header_index[100];
...
} *
(gdb) ptype pStTrct->pStRequest->test_parsed_msg->test_header_index
type = struct {
...
int test_added_current_sub_index;
...
}
(gdb) ptype pStTrct->pStRequest->test_parsed_msg->test_header_index[84].test_current_sub_index
type = int
(gdb) p pStTrct->pStRequest->test_parsed_msg->test_header_index[84].test_current_sub_index
$1 = 10923
위에서 test_header_index의 배열이 최대 114개까지 사용할 수 있는데
이를 일일이 실행하기 너무 어려움, 개수를 세지도 못하겠음
이렇게 하면 i의 index가 하나씩 증가하면서 위에 보다는 조금 편해짐
하지만 114번 일일이 반복 해야하므로 불편하기는 마찬가지
(gdb) set $i=0
(gdb) p pTrct->pStRequest->test_parsed_msg.test_header_index[$i++].test_curreut_sub_index
while문을 사용하니 완전 편리하다.
인덱스 정보까지 출력해주니 보기에도 좋다.
(gdb) set $i=0
(gdb) while($i < 115)
>printf "[%d] %d\n", $i, pTrct->pStRequest->test_parsed_msg.test_header_index[$i].test_current_sub_index
>set $i=$i+1
>end
* 참고한 페이지
https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_191.html
https://sourceware.org/gdb/onlinedocs/gdb/Symbols.html
2016.11.17
(gdb) info threads
(gdb) bt full
(gdb) info args
(gdb) info locals
(gdb) info variables
(gdb) thread apply all bt <-- 프로세스 종료 직전 모든 쓰레드의 백 트레이스 정보
(gdb) x/256x 0x1234abcd <-- x/개수x 주소
현재 버퍼의 index를 확인하고 그에 대한 버퍼의 내용 조회하는 명령
# cltr_memory_datashm_dump(data_shm, &_cltr_bkup.msg[cnt++], bkup_period)
# [전달하는 변수 값 확인]
(gdb) p cnt
$47 = 14
# [백업 버퍼의 정보를 cnt 값으로 조회]
(gdb) p *_stcltr_note.bnote@14
* 참고한 페이지
http://www.delorie.com/gnu/docs/gdb/gdb_25.html
http://yusufonlinux.blogspot.kr/2010/11/debugging-core-using-gdb.html
'Linux' 카테고리의 다른 글
[Linux] Bonding 본딩 설정 (1281) | 2016.12.05 |
---|---|
[SQlite3] 자주쓰는 명령어 (448) | 2016.11.23 |
ctags를 cpp에서 사용하려면 (457) | 2015.11.19 |
리눅스에서 가장 많은 CPU를 사용하는 프로세스 찾는 명령 (438) | 2015.08.06 |
tr 사용해서 파일에서 개행문자 전부 제거하기 (461) | 2015.08.04 |