programing

Clion 디버거에서 int 배열의 전체 내용을 표시하려면 어떻게 해야 합니까?

prostudy 2022. 5. 28. 09:05
반응형

Clion 디버거에서 int 배열의 전체 내용을 표시하려면 어떻게 해야 합니까?

현재 어레이의 첫 번째 요소만 표시되지만 어레이의 모든 요소를 시각적으로 보여 주십시오.클라이온은 GDB를 사용하는 것 같아요.

EDIT: 특히 힙상의 어레이를 말합니다.스택상의 어레이를 시각화할 수 있습니다.

유감스럽게도 CLion은 현재 이러한 기능을 지원하지 않습니다.JetBrains 직원이 제안한 대로 해결 방법을 사용할 수 있습니다.[평가 / 워치(Evaluate / Watches)]창에서 다음 식을 사용합니다.

(MyType[128])myArray

임의의 어레이 크기를 사용할 수 있습니다.

어레이가 저장되어 있는 경우void *변수, 좀 더 까다로운 작업을 수행해야 합니다.

(MyType[128])*(char*)myArray

cubuspl42의 답은 GDB에 적용됩니다. 그러나 Mac에서 LLDB를 디버거로 사용하는 경우 올바른 방법은 다음과 같습니다.

(MyType(*)[128])myArray

이게 도움이 됐으면 좋겠네요!

기본 디버거가 이해하는 구문은 실제로 작동합니다.예를 들어 GDB의 경우,*array@size,어디에array임의의 포인터 표현식이 될 수 있습니다.size에는 임의의 (양수) 정수식을 사용할 수 있으며, 변수, 함수 호출, 레지스터, GDB가 인식하는 모든 것을 포함할 수 있습니다.예를 들어 다음과 같은 것이 유효합니다.

*((int*)$rsp - 0x100)@get_size(data)

오늘도 같은 문제가 있었습니다만, 그 대신에 여러가지 힌트를 얻을 수 있었습니다.

pthread_t** pthreads = (pthread_t**) malloc(//malloc args)
thread_count = 0;

while(thread_count < 10) {
    pthread_t* myThread = (pthread_t*) malloc(//malloc args)
    pthreads[thread_count] = myThread;
    thread_count++;
}

CLion gdb에서 포인터에 대한 포인터를 보고 있기 때문에 이 메모리의 할당을 확인할 수 없었습니다.

이 문제를 해결하려면 어레이의 첫 번째 요소(pthreads[0])를 대상으로 하고 다음 요소를 조사합니다.n거기서부터의 요소들.

이를 수행하려면 유형(pthread_t*[])을 캐스팅한 후 타깃 메모리(pthreads[0])(첫 번째 요소)를 사용해야 합니다.

주의: 사용하였습니다.calloc0으로 설정하다pthreads이 사진은 CLion 디버거의 위치 0에서 메모리가 올바르게 할당된 방법을 보여 줍니다.

위의 게시물 중 제가 여기에 글을 썼다는 결론에 이르지 못했기 때문에 이 게시물을 작성하게 되었습니다.

예:

템플릿 및 참조를 사용할 수 있습니다.

template<int N>
void foo1(int (&arr)[N])
{
    ...
}

어레이를 다른 함수에 전달하려면 전달된 함수에서도 어레이에 템플릿과 참조를 사용해야 합니다.

template<int N>
void foo2(int (&arr)[N])
{
    ...
}
template<int N>
void foo1(int (&arr)[N])
{
    foo2(arr);
}

이 메서드를 사용하면 int 배열의 전체 내용을 클론으로 볼 수 있습니다.

언급URL : https://stackoverflow.com/questions/40327089/in-clions-debugger-how-do-i-show-the-entire-contents-of-an-int-array

반응형