스레딩으로 인해 디버깅하기 어려운 포인트 클라우드 라이브러리 앱?

주노 우즈

컴파일을 위해 cmake와 함께 Point Cloud Library를 사용하고 있으며 디버그 모드에서 빌드했지만 내 프로그램이 예상대로 오류를 분류하거나 중단하지 않습니다.

특히 다음과 같은 메시지가 표시됩니다.

(gdb) run bunny
Starting program: debug/our_cvfh bunny
libc++abi.dylib: terminating
[New Thread 0x170b of process 80178]

Program received signal SIGABRT, Aborted.
0x00007fff88c6f866 in ?? ()
(gdb) bt
#0  0x00007fff88c6f866 in ?? ()
#1  0x00007fff8bb5235c in ?? ()
#2  0x0000000000000000 in ?? ()
(gdb) break rec/registered_views_source.h:305
Cannot access memory at address 0x961d60

이 경우 오류가 어디에 있는지 알고 있지만 역 추적하여이 경우 함수를 호출 한 것을 볼 수 있기를 바랍니다.

PCL이 다른 스레드를 생성하고 있으므로 역 추적 할 수 없습니까? 지금은 시각화를 수행하고 있지 않으므로 스레딩을 사용하는 이유를 알 수 없습니다.

또한 소스 루트 디렉터리 대신 디버그 디렉터리에서 프로그램을 실행 해 보았습니다. 작동하지 않는 또 다른 예는 다음과 같습니다.

$ gdb our_cvfh
GNU gdb (GDB) 7.7
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin13.1.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from our_cvfh...done.
run (gdb) run
Starting program: /Users/jwoods/Projects/lidargl/fpfh/debug/our_cvfh
[New Thread 0x170b of process 33571]

Program received signal SIGSEGV, Segmentation fault.
0x000000010016cdec in ?? ()
(gdb) bt
#0  0x000000010016cdec in ?? ()
#1  0x00007fff5fbfbd08 in ?? ()
#2  0x00007fff5fbfbcc0 in ?? ()
#3  0x00007fff5fbfbcc8 in ?? ()
#4  0x00007fff5fbfbcc8 in ?? ()
#5  0x00007fff5fbfbcc8 in ?? ()
#6  0xffffffffffffffff in ?? ()
#7  0x00007fff5fbfbcc8 in ?? ()
#8  0x00007fff5fbfbcc8 in ?? ()
#9  0x00007fff5fbfbcc0 in ?? ()
#10 0x00007fff5fbfbcc0 in ?? ()
#11 0x00007fff5fbfbcc8 in ?? ()
#12 0x00007fff5fbfbcc8 in ?? ()
#13 0x00007fff5fbfbcc8 in ?? ()
#14 0x00007fff5fbff4a8 in ?? ()
#15 0x00007fff5fbff4d8 in ?? ()
#16 0x00007fff5fbff420 in ?? ()
#17 0x00007fff5fbff4d8 in ?? ()
#18 0x0000000000000000 in ?? ()
(gdb)

gdb는 CMake를 사용하지 않을 때 잘 작동하므로 CMake와 관련이 있다고 생각합니다. 이것은 다른 누구에게도 문제를 일으키지 않는 것 같습니다. Mac OS X에서 CMake를 사용하고 있다는 사실과도 관련이있을 수 있습니다.

정상적인 GDB 동작을 어떻게 얻습니까?

최신 정보

dsymutil my_output_binary디버깅 기호를 생성하기 위해 실행할 수 있습니다 (다음 make). 이것은 해결 방법입니다. 자동으로 수행되기를 바라며 왜 그렇지 않은지 잘 모르겠습니다. dsymutil전략은 대부분의 segfault에서 작동하지만 SIGABRT의 일부 경우에는 작동하지 않습니다. 다음은 출력입니다.

Calling compute <--- normal std::cerr output of my program, single-threaded
Assertion failed: (index >= 0 && index < size()), function operator[], file /usr/local/Cellar/eigen/3.2.1/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h, line 378.
[New Thread 0x170b of process 64108]

Program received signal SIGABRT, Aborted.
0x00007fff84999866 in ?? ()
(gdb) bt
#0  0x00007fff84999866 in ?? ()
#1  0x00007fff862c335c in ?? ()
#2  0x0000000000000000 in ?? ()
(gdb) info threads
  Id   Target Id         Frame
  2    Thread 0x170b of process 64108 0x00007fff8499a662 in ?? ()
* 1    Thread 0x1503 of process 64108 0x00007fff84999866 in ?? ()
(gdb)

내 프로그램은 그 자체가 다중 스레드가 아니지만 스레드를 생성하는 라이브러리를 사용하는 것 같습니다. 또는 적어도 gdb 출력에서 ​​수집 한 것입니다.

PCL에서 사용하는 Eigen으로 스레딩을 비활성화 해 보았습니다.

흥미롭게도 lldb역 추적을 생성 할 수 있지만 GDB가 할 수없는 이유가 궁금합니다.

주노 우즈

단순히 GDB 대신 LLDB를 사용하는 것 외에는 스레드를 디버깅하는 방법을 찾지 못했습니다.

그러나 디버깅 기호를 자동으로 생성하는 방법을 알아 냈습니다! 만세.

세 개의 파일이 필요합니다.

프로젝트의 cmake/Modules/디렉토리 에 넣으십시오 .

에서는 CMakeLists.txt프로젝트 선언 후 다음 줄이 필요합니다.

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules/")

if (APPLE) # this if statement is optional, but you definitely need the include()
  include(UseDebugSymbols)
endif (APPLE)

적절한 위치에서 찾을 수 있습니다.

동시에 내 프로젝트에 또 다른 변경 사항을 적용했으며 이는 여러분에게도 유용 할 수 있습니다. add_executable줄에서 대상 이름 바로 뒤에 MACOSX_BUNDLE. 이 플래그는 .app정규 바이너리 대신 컴파일되도록합니다 . 내 프로젝트의 예는 다음과 같습니다.

add_executable(pose MACOSX_BUNDLE pose.cpp rec/global_nn_recognizer_cvfh.cpp rec/global_nn_recognizer_cvfh.hpp rec/render_views_tesselated_sphere.cpp)

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

디스크 제한으로 인해 클라우드 파운드리 앱 푸시가 실패 함

분류에서Dev

ASP.NET MVC 웹앱의 ID / 인증 부분을 클래스 라이브러리로 이동하려면 어떻게해야합니까?

분류에서Dev

처리를 위해 네트워크 라이브러리를 다운로드하려면 어떻게합니까?

분류에서Dev

타사 라이브러리 인 SWXMLHash를 플레이 그라운드에서 사용하려면 어떻게해야합니까?

분류에서Dev

앱의 requirements.txt를 확인하기 위해 Google Collab에서 라이브러리 버전을 확인하려면 어떻게해야합니까?

분류에서Dev

내 자바 스크립트 앱이 내 Google 클라우드 엔드 포인트에 액세스하려고 할 때 401 오류

분류에서Dev

어떻게 안드로이드 라이브러리의 디버깅 또는 디버그 빌드 유형을 확인하는?

분류에서Dev

Xamarin iOS 바인딩 라이브러리보기 컨트롤러 단추 클릭 크래시 Xamarin 양식 앱

분류에서Dev

포인트 클라우드 라이브러리 및 ROS를 사용하여 kinect에서 과거 포인트 클라우드 저장 및 추가

분류에서Dev

PCL (포인트 클라우드 라이브러리)을 사용하여 객체 정보 배열 얻기

분류에서Dev

미친 React 라이브러리 코드 라인 디버깅

분류에서Dev

포인트 클라우드 라이브러리에서 matrix3f의 첫 번째 열에 액세스하는 방법은 무엇입니까?

분류에서Dev

Google API 자바 스크립트 클라이언트 라이브러리를 Chrome 앱에로드하는 방법

분류에서Dev

Google 앱 엔진의 Google 클라우드 엔드 포인트

분류에서Dev

Android 앱은 클라이언트에 배포하기 전에 릴리스 모드로 로그인해야합니까?

분류에서Dev

Windows 유니버설 앱이 포함 된 Active Directory 인증 라이브러리

분류에서Dev

인앱 업데이트 라이브러리로 메모리 누수를 방지하는 방법

분류에서Dev

OpenGL로 포인트 클라우드를 표시하는 방법

분류에서Dev

클라이언트로 강제 다운로드하는 방법 .. 브라우저에서 인쇄 중

분류에서Dev

앱 엔진의 스레드 안전 클라이언트 라이브러리 (python)

분류에서Dev

음악 라이브러리에 파일 브라우저로 액세스하는 오디오 플레이어 (폴더 구조 확인)

분류에서Dev

음악 라이브러리에 파일 브라우저로 액세스하는 오디오 플레이어 (폴더 구조 확인)

분류에서Dev

포인트 클라우드 라이브러리를 통한 장애물 회피

분류에서Dev

포인트 클라우드 라이브러리에 새 PointType 추가

분류에서Dev

Google Glass에서 Android 앱을 테스트하기 위해 Google Glass에서 디버깅 모드를 활성화하려면 어떻게해야합니까?

분류에서Dev

클래스 라이브러리의 메인 앱에서 dryioc 컨테이너를 사용하는 방법

분류에서Dev

내 라이브러리를 사용중인 앱 찾기

분류에서Dev

Express.js로 인해 브라우저에서 파일이 다운로드되지 않도록하려면 어떻게해야합니까?

분류에서Dev

Java 앱 로깅 이벤트를 GCP Felexible non-compat App Engine의 해당 클라우드 로깅 이벤트 레벨에 어떻게 매핑합니까?

Related 관련 기사

  1. 1

    디스크 제한으로 인해 클라우드 파운드리 앱 푸시가 실패 함

  2. 2

    ASP.NET MVC 웹앱의 ID / 인증 부분을 클래스 라이브러리로 이동하려면 어떻게해야합니까?

  3. 3

    처리를 위해 네트워크 라이브러리를 다운로드하려면 어떻게합니까?

  4. 4

    타사 라이브러리 인 SWXMLHash를 플레이 그라운드에서 사용하려면 어떻게해야합니까?

  5. 5

    앱의 requirements.txt를 확인하기 위해 Google Collab에서 라이브러리 버전을 확인하려면 어떻게해야합니까?

  6. 6

    내 자바 스크립트 앱이 내 Google 클라우드 엔드 포인트에 액세스하려고 할 때 401 오류

  7. 7

    어떻게 안드로이드 라이브러리의 디버깅 또는 디버그 빌드 유형을 확인하는?

  8. 8

    Xamarin iOS 바인딩 라이브러리보기 컨트롤러 단추 클릭 크래시 Xamarin 양식 앱

  9. 9

    포인트 클라우드 라이브러리 및 ROS를 사용하여 kinect에서 과거 포인트 클라우드 저장 및 추가

  10. 10

    PCL (포인트 클라우드 라이브러리)을 사용하여 객체 정보 배열 얻기

  11. 11

    미친 React 라이브러리 코드 라인 디버깅

  12. 12

    포인트 클라우드 라이브러리에서 matrix3f의 첫 번째 열에 액세스하는 방법은 무엇입니까?

  13. 13

    Google API 자바 스크립트 클라이언트 라이브러리를 Chrome 앱에로드하는 방법

  14. 14

    Google 앱 엔진의 Google 클라우드 엔드 포인트

  15. 15

    Android 앱은 클라이언트에 배포하기 전에 릴리스 모드로 로그인해야합니까?

  16. 16

    Windows 유니버설 앱이 포함 된 Active Directory 인증 라이브러리

  17. 17

    인앱 업데이트 라이브러리로 메모리 누수를 방지하는 방법

  18. 18

    OpenGL로 포인트 클라우드를 표시하는 방법

  19. 19

    클라이언트로 강제 다운로드하는 방법 .. 브라우저에서 인쇄 중

  20. 20

    앱 엔진의 스레드 안전 클라이언트 라이브러리 (python)

  21. 21

    음악 라이브러리에 파일 브라우저로 액세스하는 오디오 플레이어 (폴더 구조 확인)

  22. 22

    음악 라이브러리에 파일 브라우저로 액세스하는 오디오 플레이어 (폴더 구조 확인)

  23. 23

    포인트 클라우드 라이브러리를 통한 장애물 회피

  24. 24

    포인트 클라우드 라이브러리에 새 PointType 추가

  25. 25

    Google Glass에서 Android 앱을 테스트하기 위해 Google Glass에서 디버깅 모드를 활성화하려면 어떻게해야합니까?

  26. 26

    클래스 라이브러리의 메인 앱에서 dryioc 컨테이너를 사용하는 방법

  27. 27

    내 라이브러리를 사용중인 앱 찾기

  28. 28

    Express.js로 인해 브라우저에서 파일이 다운로드되지 않도록하려면 어떻게해야합니까?

  29. 29

    Java 앱 로깅 이벤트를 GCP Felexible non-compat App Engine의 해당 클라우드 로깅 이벤트 레벨에 어떻게 매핑합니까?

뜨겁다태그

보관