GDB에서 역 추적의 템플릿 함수 서명을 해석하는 방법은 무엇입니까?

삼륜차

GDB의 역 추적 출력은 특히 템플릿의 경우 매우 지저분합니다.

예를 들면 :

Thread 2 (LWP 100146 of process 1245):
#0  thr_new () at thr_new.S:3
#1  0x000000080025c3da in _pthread_create (thread=0x7fffdfffd880, attr=<optimized out>, start_routine=0x205500 <void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (std::__1::__async_assoc_state<void, std::__1::__async_func<func2(std::__1::atomic<long>&)::$_0> >::*)(), std::__1::__async_assoc_state<void, std::__1::__async_func<func2(std::__1::atomic<long>&)::$_0> >*> >(void*)>, arg=0x8007fa8e0) at /usr/src/lib/libthr/thread/thr_create.c:188
#2  0x0000000000204e40 in std::__1::thread::thread<void (std::__1::__async_assoc_state<void, std::__1::__async_func<func2(std::__1::atomic<long>&)::$_0> >::*)(), std::__1::__async_assoc_state<void, std::__1::__async_func<func2(std::__1::atomic<long>&)::$_0> >*, void>(void (std::__1::__async_assoc_state<void, std::__1::__async_func<func2(std::__1::atomic<long>&)::$_0> >::*&&)(), std::__1::__async_assoc_state<void, std::__1::__async_func<func2(std::__1::atomic<long>&)::$_0> >*&&) ()
#3  0x0000000000204309 in std::__1::future<void> std::__1::__make_async_assoc_state<void, std::__1::__async_func<func2(std::__1::atomic<long>&)::$_0> >(std::__1::__async_func<func2(std::__1::atomic<long>&)::$_0>&&) ()
#4  0x00000000002035ea in std::__1::future<std::__1::__invoke_of<std::__1::decay<func2(std::__1::atomic<long>&)::$_0>::type>::type> std::__1::async<func2(std::__1::atomic<long>&)::$_0>(std::__1::launch, func2(std::__1::atomic<long>&)::$_0&&) ()
#5  0x0000000000203462 in func2(std::__1::atomic<long>&) ()
#6  0x0000000000206f18 in main::$_1::operator()() const ()
#7  0x0000000000206eed in void std::__1::__async_func<main::$_1>::__execute<>(std::__1::__tuple_indices<>) ()
#8  0x0000000000206ea5 in std::__1::__async_func<main::$_1>::operator()() ()
#9  0x0000000000206df3 in std::__1::__async_assoc_state<void, std::__1::__async_func<main::$_1> >::__execute() ()
#10 0x0000000000207183 in void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (std::__1::__async_assoc_state<void, std::__1::__async_func<main::$_1> >::*)(), std::__1::__async_assoc_state<void, std::__1::__async_func<main::$_1> >*> >(void*) ()
#11 0x000000080025c776 in thread_start (curthread=0x8007de500) at /usr/src/lib/libthr/thread/thr_create.c:292
#12 0x0000000000000000 in ?? ()
Backtrace stopped: Cannot access memory at address 0x7fffdfffe000

프레임 # 8에는 세 쌍의 괄호 std::__1::__async_func<main::$_1>::operator()() ()가 있는데 정확히 무엇을 의미합니까?

고용 된 러시아어

프레임 # 8에는 디버그 정보가 없으므로 GDB는이를 정확하게 설명 할 수 없습니다.

이 테스트 케이스를 고려하십시오.

struct Foo {
  int operator()(void) {
    return 1;  // line 3
  }
};

int main()
{
  return Foo()();
}

g++ -g t.cc3 행의 중단 점에서 컴파일 할 때 GDB가 표시하는 내용은 다음과 같습니다.

Breakpoint 1, Foo::operator() (this=0x7fffffffdcff) at t.cc:3
3       return 1;
(gdb) bt 
#0  Foo::operator() (this=0x7fffffffdcff) at t.cc:3
#1  0x0000555555555139 in main () at t.cc:10

그러나없이 동일한 소스를 컴파일하고 -g에 중단 점을 설정하면 다음 _ZN3FooclEv과 같이 표시됩니다.

Breakpoint 1, 0x0000555555555140 in Foo::operator()() ()
(gdb) bt 
#0  0x0000555555555140 in Foo::operator()() ()
#1  0x0000555555555139 in main ()

처음 두 세트의 괄호는 기호를 분해 한 것입니다.

c++filt _ZN3FooclEv
Foo::operator()()

세 번째 세트는 표시되는 기호가 .text섹션에 있고 함수로 간주 되기 때문에 GDB에 의해 추가됩니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

XSL-템플릿에서 전역 매개 변수 이름을 호출하는 방법은 무엇입니까?

분류에서Dev

정적 함수에서 템플릿을 사용하는 방법은 무엇입니까?

분류에서Dev

함수 템플릿의 인스턴스화에서 템플릿 매개 변수를 추론하는 방법은 무엇입니까?

분류에서Dev

템플릿 클래스의 이름을 템플릿 인수에 전달하는 방법은 무엇입니까?

분류에서Dev

Django 모델에 정의 된 템플릿에서 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

클래스 템플릿에서 상속되는 템플릿 매개 변수의 기본 템플릿 유형을 확인하는 방법은 무엇입니까?

분류에서Dev

장고에서 두 개의 템플릿으로 뷰 함수를 연결하는 방법은 무엇입니까?

분류에서Dev

Helm 함수의 템플릿에서 맵 객체를 반환하는 방법은 무엇입니까?

분류에서Dev

blazeComponent의 다른 템플릿에서 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

콧수염 템플릿에 주석을 추가하는 방법은 무엇입니까?

분류에서Dev

다른 네임 스페이스 내에서 함수 템플릿을 명시 적으로 전문화하는 방법은 무엇입니까?

분류에서Dev

OCaml 프로그램의 GDB 역 추적을 해석하는 방법은 무엇입니까?

분류에서Dev

Django : HTML 템플릿의 해당 OP에 주석을 연결하는 방법은 무엇입니까?

분류에서Dev

링커에서 gdb를 통해 가져온 전역 변수의 값을 얻는 방법은 무엇입니까?

분류에서Dev

Variadic 템플릿의 상속을 해석하는 방법은 무엇입니까?

분류에서Dev

xslt의 다른 템플릿에서 템플릿을 호출하는 방법은 무엇입니까?

분류에서Dev

OpenStack HOT 템플릿 파일에서 로컬 셸 명령을 수행하는 방법은 무엇입니까?

분류에서Dev

Django 템플릿에서 숫자 변수를 추가하고 곱하는 방법은 무엇입니까?

분류에서Dev

Django 템플릿에서 숫자 변수를 추가하고 곱하는 방법은 무엇입니까?

분류에서Dev

템플릿의 각 함수 위에 템플릿을 선언해야하는 이유는 무엇입니까?

분류에서Dev

Android Chromium에서 함수 호출 역 추적을 인쇄하는 방법은 무엇입니까?

분류에서Dev

Meteor의 템플릿 파일에서 URL 매개 변수에 액세스하는 방법은 무엇입니까?

분류에서Dev

템플릿과 django의 변수를 사용할 때 템플릿에서 js 파일을 이동하는 방법은 무엇입니까?

분류에서Dev

Freemarker 템플릿의 HashMap에서 값을 얻는 방법은 무엇입니까?

분류에서Dev

템플릿에서 django의 뷰로 2 개의 인수를 전달하는 방법은 무엇입니까?

분류에서Dev

Django의 템플릿 내에서 views.py의 변수를 사용하는 방법은 무엇입니까?

분류에서Dev

SilverStripe 템플릿에서 날짜 기능을 번역하는 방법은 무엇입니까?

분류에서Dev

WordPress WPGlobus : 템플릿 파일에서 지역화 된 URL을 생성하는 방법은 무엇입니까?

분류에서Dev

템플릿 함수 반환 유형에서 중복을 피하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    XSL-템플릿에서 전역 매개 변수 이름을 호출하는 방법은 무엇입니까?

  2. 2

    정적 함수에서 템플릿을 사용하는 방법은 무엇입니까?

  3. 3

    함수 템플릿의 인스턴스화에서 템플릿 매개 변수를 추론하는 방법은 무엇입니까?

  4. 4

    템플릿 클래스의 이름을 템플릿 인수에 전달하는 방법은 무엇입니까?

  5. 5

    Django 모델에 정의 된 템플릿에서 함수를 호출하는 방법은 무엇입니까?

  6. 6

    클래스 템플릿에서 상속되는 템플릿 매개 변수의 기본 템플릿 유형을 확인하는 방법은 무엇입니까?

  7. 7

    장고에서 두 개의 템플릿으로 뷰 함수를 연결하는 방법은 무엇입니까?

  8. 8

    Helm 함수의 템플릿에서 맵 객체를 반환하는 방법은 무엇입니까?

  9. 9

    blazeComponent의 다른 템플릿에서 함수를 호출하는 방법은 무엇입니까?

  10. 10

    콧수염 템플릿에 주석을 추가하는 방법은 무엇입니까?

  11. 11

    다른 네임 스페이스 내에서 함수 템플릿을 명시 적으로 전문화하는 방법은 무엇입니까?

  12. 12

    OCaml 프로그램의 GDB 역 추적을 해석하는 방법은 무엇입니까?

  13. 13

    Django : HTML 템플릿의 해당 OP에 주석을 연결하는 방법은 무엇입니까?

  14. 14

    링커에서 gdb를 통해 가져온 전역 변수의 값을 얻는 방법은 무엇입니까?

  15. 15

    Variadic 템플릿의 상속을 해석하는 방법은 무엇입니까?

  16. 16

    xslt의 다른 템플릿에서 템플릿을 호출하는 방법은 무엇입니까?

  17. 17

    OpenStack HOT 템플릿 파일에서 로컬 셸 명령을 수행하는 방법은 무엇입니까?

  18. 18

    Django 템플릿에서 숫자 변수를 추가하고 곱하는 방법은 무엇입니까?

  19. 19

    Django 템플릿에서 숫자 변수를 추가하고 곱하는 방법은 무엇입니까?

  20. 20

    템플릿의 각 함수 위에 템플릿을 선언해야하는 이유는 무엇입니까?

  21. 21

    Android Chromium에서 함수 호출 역 추적을 인쇄하는 방법은 무엇입니까?

  22. 22

    Meteor의 템플릿 파일에서 URL 매개 변수에 액세스하는 방법은 무엇입니까?

  23. 23

    템플릿과 django의 변수를 사용할 때 템플릿에서 js 파일을 이동하는 방법은 무엇입니까?

  24. 24

    Freemarker 템플릿의 HashMap에서 값을 얻는 방법은 무엇입니까?

  25. 25

    템플릿에서 django의 뷰로 2 개의 인수를 전달하는 방법은 무엇입니까?

  26. 26

    Django의 템플릿 내에서 views.py의 변수를 사용하는 방법은 무엇입니까?

  27. 27

    SilverStripe 템플릿에서 날짜 기능을 번역하는 방법은 무엇입니까?

  28. 28

    WordPress WPGlobus : 템플릿 파일에서 지역화 된 URL을 생성하는 방법은 무엇입니까?

  29. 29

    템플릿 함수 반환 유형에서 중복을 피하는 방법은 무엇입니까?

뜨겁다태그

보관