반응형

C , C++, C# 45

[gdb] 표준 파일 건너뛰기

CLion으로 WSL을 통해 gcc 컴파일러의 gdb를 사용하다보면 Visual Studio와 다르게 좀 빡센 경험을 할 수 있다. step into시에도 좀 차이가 있는 등 까다롭다. 그 중에서 가장 문제가 되는 표준 라이브러리 소스 파일을 계속해서 들어가 함수 호출 스텍 및 확인이 복잡하다. 사용자 함수만 확인해서 각 지역 / 로컬 값만 보면 되는데 이게 자꾸 컴파일러의 내부 구현 코드를 보니문제가 되고 있다. VS는 디버그 옵션에서 설정할 수 있지만, Linux GCC의 경우 아래와 같은 방법을 사용할 수 있다. https://stackoverflow.com/questions/5676241/tell-gdb-to-skip-standard-files Tell gdb to skip standard fil..

C , C++, C# 2024.05.01

[C++] VS 2017/C++14 에서 VS 2022/C++20 마이그레이션 에러 정리

현재 Windows 환경에서 Visual Studio 2017 / C++14 피처를 사용하는 프로젝트이다. 이 프로젝트의 컴파일러와 피처를 업데이트하면서 발생하게 된 에러를 정리해본다. 업데이트 이유는 최신 VS IDE에서 sanitizer도 지원하고 최신 C++ 피처 사용등이 가능하기 때문이다. (덕분에 템플릿 관련쪽을 concepts으로 바꾸는 작업도 공부할 수 있었다.) 이제 하나씩 정리해보자. 1.c2872 'byte' ambiguous symbol 컴파일시 이런 에러가 발생하는데... byte 키워드가 이상하단다.. 컴파일러의 헤더파일에서 발생한다. https://developercommunity.visualstudio.com/t/error-c2872-byte-ambiguous-symbol/93..

C , C++, C# 2024.02.20

[Vtune] WSL2로 remote ssh 설정하기

Vtune으로 memory access / microarchitecture exploration 확인하기 위한 정리이다. 1. 먼저 대부분 vTune을 SSH Linux로 연결하여 확인하길래 필자도 WSL2 환경에서 한번 연결을 시도하였다. http://interp.blog/vtune-memory-bandwidth/ Intel VTune Memory Bandwidth 분석하기 Intel VTune 으로 Memory Bandwidth 를 분석하려면, 분석할 수 있는 커널 드라이버를 로딩시켜야 한다. (참고로 메모리 분석은 리눅스에서만 가능하다.) 해당 작업을 하지 않고 ‘General Exploration > Analyze me interp.blog 위 글을 보면 알 수 있으며 필자는 readme.txt까..

C , C++, C# 2023.12.20

[Windows C++] 레지스트리 값 읽기

기존 글에서, 윈도우 레지스트리를 설정한 작업이 있었다. 그렇다면 C++ 코드에서 해당 레지스트리 값을 확인할 필요가 있을 수 있다. https://stackoverflow.com/questions/66328789/c-cant-read-registry-value-data C++ Can't read registry value data Was recently working for a client and need to read a value from registry. So I wanted to start off by trying something simple, reading the system Guid from the registry. This is the code that I'm u... stackoverf..

C , C++, C# 2023.09.10

[CMake] VS 2022 CMakePresets error using toolset

VS 2022 최신 버전에서 CMake를 지원해주는데 이번 최신 피처에 Configuration 관련해서 다양한 기능을 제공한다길래 사용해보려고 했다. 결론은.. Error로 인해 적용못했지만, 깃헛 이슈에도 물어보고 한번 처리해 봐야할듯하다. 이것이 된다면, Ninja 제너레이터에서 VS 2022 IDE로 v141 2017 툴셋으로 쉽게 환경을 구성하고 빌드할수 있을것 같다. 먼저, CMakePresets.json을 보자 "configurePresets": [ { "name": "debug", "description": "default debug preset", "hidden": true, "installDir": "${sourceParentDir}/install/debug", "cacheVariabl..

C , C++, C# 2023.06.05

[기본] char* / char [] in C

이걸 다시 볼일은 없을것 같지만 기록해두자 왜 런타임 에러가 발생하는지 생각해보고 아래의 답을 확인할 수 있다. https://www.geeksforgeeks.org/whats-difference-between-char-s-and-char-s-in-c/ What's difference between char s[] and char *s in C? - GeeksforGeeks A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/comp..

C , C++, C# 2023.01.05

Cmake에서 WIN 매크로

개발하거나 유지보수할때 보면.. WIN32 관련 매크로가 정말 많다. 보통 _WIN32는 32bit 윈도우, _WIN64 는 64bit 윈도우라 생각할수 있는데... 그것이 아니었다 https://stackoverflow.com/questions/6679396/should-i-define-both-win32-and-win64-in-64bit-build Should I define both _WIN32 and _WIN64 in 64bit build? When we add a 64bit configuration from a 32bit project that has already existed, Visual Studio copies the 32bit configurations by default. VS eve..

C , C++, C# 2022.12.15

[Visual Studio] 릴리즈 바이너리 디버깅하기

신기하게도.. 디버그 바이너리에서는 문제가 없는데... 테스트 코드의 릴리즈 바이너리에서는 Gtest가 실패하는게 문제였다. 그래서.. 릴리즈 바이너리도 디버깅이 되는가 해서 좀 찾아보았다. https://learn.microsoft.com/en-us/cpp/build/how-to-debug-a-release-build?view=msvc-170 How to: Debug a Release Build Learn more about: How to: Debug a Release Build learn.microsoft.com 다행히 MSVC의 공식 문서에서 확인할 수 있다. 내용을 보면 누구나 쉽게 적용할 수 있다. CMake로 제너레이터가 되어 있고 전체 프로젝트가 하도 많고 커서.. 다 하는건 불가능했고 문제..

C , C++, C# 2022.12.07

[Visual Studio 2022] VS 2022 크로스 플랫폼 빌드: CMakepprest.json

먼저, MS의 설명을 보면 아래와 같다. https://youtu.be/yImev317_Ns 드디어 CLion이 아닌 VS에서 크로스 플랫폼으로 윈도우와 리눅스에서빌드하고 디버깅할수 있기를 기도할수 있게 되었다. 또한, VS Generator가 아닌 Ninija등으로도 다양하게 디버깅 모드와 릴리즈 모드를 기대할수 있다. 이제 한번 적용한 것들을 정리해보고자 한다. 1. 동영상처럼 VS의 옵션에서 여러가지 세팅할수 있다. VS 2022에서는 CMakepreset.json의 유무를 가지고 크로스플랫폼을 빌드할수 있다. 따라서 해당 파일이 필수적이라고 보면 된다. CMakeSettings.json은 잘 모르니 넘어간다. 하지만, 여러 시작도 전에 몇개 이상한것들이 있다. 하나씩 확인해보면 아래와 같다. 간단..

C , C++, C# 2022.11.07

[Visual Studio] LNK2019: unresolved external symbol

링크 에러... 왜 못찾는 것일까.. 라이브러리를 덤프했을때 외부 기호가 extenral로 함수 이름이 정확히 있었다... 그러면 보통 라이브러리만 링크해도 문제가 없어야 하는데.. 도저히 못할줄 알았지만 다행히 공식 문서와 stackoverflow를 통해 해결할 수 있었다. 원인은 함수 기호 이름의 문제였다. 내가 작업하는 솔루션은 cpp이지만, 라이브러리로 만들어 사용하려는 솔루션은 모두 C 파일이다... 여기서 아는 사람은 cpp의 name mangling에 대해 알고 있을것이다. C 언어와 cpp 언어는 다르며 해당 규약들과 이름에 대해 다르기때문에 똑같이 맞춰줄 필요가 있다... C++ 프로그램에서 런타임 라이브러리 함수를 사용할 수 있도록 하는 구문인 extern "C" 를 사용해서 간단히 해..

C , C++, C# 2022.09.08
반응형