Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 2개 있습니다.)
Linux: 29. 리눅스 환경에서 C/C++ 프로그램이 Segmentation fault 에러가 발생한 경우
; https://www.sysnet.pe.kr/2/0/12208

오류 유형: 614. 리눅스 환경에서 C/C++ 프로그램이 Segmentation fault 에러가 발생한 경우 (2)
; https://www.sysnet.pe.kr/2/0/12209




리눅스 환경에서 C/C++ 프로그램이 Segmentation fault 에러가 발생한 경우

리눅스 환경에 낯설다 보니 ^^ 회사 동료가 빠르게 오류 원인을 파악하는 방법을 알려줬습니다. 우선, (아마도 container 환경이라면 거의 없을 텐데) gdb를 설치하고,

apt-get update && apt-get install -y --no-install-recommends gdb

gdb를 대상 실행 모듈을 로드하도록 실행한 후, (이 글에서는 dotnet 프로그램으로 가정)

$ gdb dotnet
GNU gdb (Debian 7.12-6) 7.12.0.20161007-git
Copyright (C) 2016 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-linux-gnu".
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 dotnet...(no debugging symbols found)...done.

명령행 인자가 있다면 함께 명시하면서 "r"로 실행을 시키면,

(gdb) r "razor21_sample.dll"
Starting program: /usr/bin/dotnet "razor21_sample.dll"
warning: Error disabling address space randomization: Operation not permitted
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fe676029700 (LWP 745)]
...[생략]...
[New Thread 0x7fe667fff700 (LWP 790)]

Thread 1 "dotnet" received signal SIGSEGV, Segmentation fault.
0x00007f0a363b5c0c in construct<unsigned char, unsigned char const&> ()
    at /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/ext/new_allocator.h:136
136     /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/ext/new_allocator.h: No such file or directory.

Segmentation fault 오류가 발생한 시점에 서게 되고, 이때 bt 명령을 통해 호출 스택을 살필 수 있습니다.

(gdb) bt
#0  0x00007fe6740bfc0c in construct<unsigned char, unsigned char const&> ()
    at /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/ext/new_allocator.h:136
#1  construct<unsigned char, unsigned char const&> ()
    at /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/alloc_traits.h:475
#2  push_back ()
    at /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_vector.h:1079
#3  TestSegFaultMethod ()
    at /home/testusr/projects/libTest/shared/TestInfo.cpp:2315
#4  0x00007fe6740bf6d8 in TestResolve ()
    at /home/testusr/projects/libTest/shared/TestInfo.cpp:2155
#5  0x00007fe6740e3d4d in TestCall ()
    at /home/testusr/projects/libTest/shared/TestApp.cpp:1391
#6  0x00007fe6740e3439 in TestMethod ()
    at /home/testusr/projects/libTest/shared/TestApp.cpp:1273
#7  0x00007fe6740e2e49 in TestJIT ()
    at /home/testusr/projects/libTest/shared/TestApp.cpp:1178
#8  0x00007fe677132f3c in EEToProfInterfaceImpl::TestJIT(unsigned long, int) ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#9  0x00007fe67726d222 in MethodDesc::JitCompileCodeLockedEventWrapper(PrepareCodeConfig*, ListLockEntryBase<NativeCodeVersion>*) ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#10 0x00007fe67726cbb0 in MethodDesc::JitCompileCode(PrepareCodeConfig*) ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#11 0x00007fe67726c937 in MethodDesc::PrepareILBasedCode(PrepareCodeConfig*) ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#12 0x00007fe67726ef15 in MethodDesc::DoPrestub(MethodTable*) ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#13 0x00007fe67726e844 in PreStubWorker ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#14 0x00007fe6771f0bc4 in ThePreStub ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#15 0x00007fe6771efedf in CallDescrWorkerInternal ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#16 0x00007fe67711060c in MethodDescCallSite::CallTargetWorker(unsigned long const*, unsigned long*, int) ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#17 0x00007fe677211076 in RunMain(MethodDesc*, short, int*, PtrArray**) ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#18 0x00007fe677211315 in Assembly::ExecuteMainMethod(PtrArray**, int) ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#19 0x00007fe677059ec2 in CorHost2::ExecuteAssembly(unsigned int, char16_t const*, int, char16_t const**, unsigned int*) ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
#20 0x00007fe677034fe4 in coreclr_execute_assembly ()
   from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libcoreclr.so
---Type <return> to continue, or q <return> to quit---

#21 0x00007fe67780c84d in ?? () from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libhostpolicy.so
#22 0x00007fe6777ff2cd in ?? () from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libhostpolicy.so
#23 0x00007fe6777ffb1c in corehost_main () from /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.17/libhostpolicy.so
#24 0x00007fe677ab29cf in ?? () from /usr/share/dotnet/host/fxr/2.1.17/libhostfxr.so
#25 0x00007fe677abdf8c in ?? () from /usr/share/dotnet/host/fxr/2.1.17/libhostfxr.so
#26 0x00007fe677abf0e5 in ?? () from /usr/share/dotnet/host/fxr/2.1.17/libhostfxr.so
#27 0x00007fe677abe659 in ?? () from /usr/share/dotnet/host/fxr/2.1.17/libhostfxr.so
#28 0x00007fe677ab2c1c in hostfxr_main_startupinfo () from /usr/share/dotnet/host/fxr/2.1.17/libhostfxr.so
#29 0x000000000040ac74 in ?? ()
#30 0x000000000040af05 in ?? ()
#31 0x00007fe677d232e1 in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
#32 0x0000000000408a54 in _start ()
(gdb) 

이 정도만 확인할 수 있어도, 어떻게 원인을 탐색 및 해결해야 할지 큰 도움이 됩니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 4/12/2020]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 91  92  93  94  95  96  97  98  99  100  101  102  [103]  104  105  ...
NoWriterDateCnt.TitleFile(s)
11460정성태3/13/201820754디버깅 기술: 112. windbg - 닷넷 메모리 덤프에서 전역 객체의 내용을 조사하는 방법
11459정성태3/13/201822700오류 유형: 453. Debug Diagnostic Tool에서 mscordacwks.dll을 찾지 못하는 문제
11458정성태2/21/201823768오류 유형: 452. This share requires the obsolete SMB1 protocol, which is unsafe and could expose your system to attack. [1]
11457정성태2/17/201826872.NET Framework: 732. C# - Task.ContinueWith 설명 [1]파일 다운로드1
11456정성태2/17/201833382.NET Framework: 731. C# - await을 Task 타입이 아닌 사용자 정의 타입에 적용하는 방법 [7]파일 다운로드1
11455정성태2/17/201822986오류 유형: 451. ASP.NET Core - An error occurred during the compilation of a resource required to process this request.
11454정성태2/12/201832343기타: 71. 만료된 Office 제품 키를 변경하는 방법
11453정성태1/31/201823717오류 유형: 450. Azure Cloud Services(classic) 배포 시 "Certificate with thumbprint ... doesn't exist." 오류 발생
11452정성태1/31/201829311기타: 70. 재현 가능한 최소한의 예제 프로젝트란? [3]파일 다운로드1
11451정성태1/24/201822920디버깅 기술: 111. windbg - x86 메모리 덤프 분석 시 닷넷 메서드의 호출 인자 값 확인
11450정성태1/24/201840341Windows: 146. PowerShell로 원격 프로세스(EXE, BAT) 실행하는 방법 [1]
11449정성태1/23/201826324오류 유형: 449. 단위 테스트 - Could not load file or assembly 'Microsoft.VisualStudio.QualityTools.VideoRecorderEngine' or one of its dependencies. [1]
11448정성태1/20/201824226오류 유형: 448. Fakes를 포함한 단위 테스트 프로젝트를 빌드 시 CS0619 관련 오류 발생
11447정성태1/20/201825584.NET Framework: 730. dotnet user-secrets 명령어 [2]파일 다운로드1
11446정성태1/20/201825552.NET Framework: 729. windbg로 살펴보는 GC heap의 Segment 구조 [2]파일 다운로드1
11445정성태1/20/201823503.NET Framework: 728. windbg - 눈으로 확인하는 Workstation GC / Server GC
11444정성태1/19/201823464VS.NET IDE: 125. Visual Studio에서 Selenium WebDriver를 이용한 웹 브라우저 단위 테스트 구성파일 다운로드1
11443정성태1/18/201825985VC++: 124. libuv 모듈 살펴 보기
11442정성태1/18/201821729개발 환경 구성: 353. ASP.NET Core 프로젝트의 "Enable unmanaged code debugging" 옵션 켜는 방법
11441정성태1/18/201819707오류 유형: 447. ASP.NET Core 배포 오류 - Ensure that restore has run and that you have included '...' in the TargetFrameworks for your project.
11440정성태1/17/201823114.NET Framework: 727. ASP.NET의 HttpContext.Current 구현에 대응하는 ASP.NET Core의 IHttpContextAccessor/HttpContextAccessor 사용법파일 다운로드1
11439정성태1/17/201829743기타: 69. C# - CPU 100% 부하 주는 프로그램파일 다운로드1
11438정성태1/17/201822576오류 유형: 446. Error CS0234 The type or namespace name 'ITuple' does not exist in the namespace
11437정성태1/17/201822504VS.NET IDE: 124. Platform Toolset 설정에 따른 Visual C++의 헤더 파일 기본 디렉터리
11436정성태1/16/201824984개발 환경 구성: 352. ASP.NET Core (EXE) 프로세스가 IIS에서 호스팅되는 방법 - ASP.NET Core Module(AspNetCoreModule) [4]
11435정성태1/16/201826735개발 환경 구성: 351. OWIN 웹 서버(EXE)를 IIS에서 호스팅하는 방법 - HttpPlatformHandler (Reverse Proxy)파일 다운로드2
... 91  92  93  94  95  96  97  98  99  100  101  102  [103]  104  105  ...