반응형



Visual Studio 2017에서 추가된 Linux 개발 기능을 Raspberry Pi에서 테스트해보았습니다.

원격 디버깅도 가능하다는데 아직 못해봤습니다.




1. Linux development with C++를 위한 워크로드 설치

2. 프로젝트 생성 1 - Blink

3. 프로젝트 생성 2 - ConsoleApplication

4. 참고



마지막 업데이트. 2019. 5. 2



1. Linux development with C++를 위한 워크로드 설치


이미 Visual Studio 2017이 설치되어 있는 경우에는 시작메뉴에서 Visual Studio Installer를 실행합니다.





추가로 설치할 항목을 선택하기 위해서 수정을 클릭합니다.





워크 로드에서 C++를 사용한 Linux 개발을 체크하고  





추가로 포함 및 IoT 개발을 체크합니다.





수정 버튼을 클릭하면 설치가 진행됩니다.





Visual Studio 2017를 새로 설치하는 경우에는  다음 포스팅에서 소개한 대로 C++ 개발 환경 관련 항목 선택 시, 추가로 위에서 선택한 C/C++를 사용한 Linux 개발을 선택하면됩니다.


Visual Studio Community 2017 설치하는 방법

http://webnautes.tistory.com/1131




Raspberry Pi에 C/C++ 컴파일러(build-essential) 외에 추가로 gdbserver를 설치해줘야 합니다.


pi@raspberrypi:~ $ sudo apt-get install build-essential gdbserver




2. 프로젝트 생성 1 - Blink

1. 메뉴에서 파일 > 새로 만들기 > 프로젝트를 선택합니다.




2. 플랫폼 간 하위 항목인 Linux를 선택합니다.




3. 깜박임(Raspberry)를 선택하고 확인을 클릭합니다.





다음과 같은 소스 코드가 생성됩니다.

추가로 노란색 2줄을 추가하여 printf문 출력 테스트까지 해보았습니다.


#include <wiringPi.h>
#include <cstdio>


// LED 핀 - wiringPi 핀 0은 BCM_GPIO 17입니다.
// wiringPiSetupSys를 초기화할 때 BCM 번호 매기기를 사용해야 합니다.
// 다른 PIN 번호를 선택하는 경우에도 BCM 번호 매기기를 사용하세요.
// 속성 페이지 - 빌드 이벤트 - 원격 빌드 후 이벤트 명령을 업데이트하세요.
// 이 명령에서는 wiringPiSetupSys 설정의 GPIO 내보내기가 사용됩니다.
#define LED 17

int main(void)
{
wiringPiSetupSys();

pinMode(LED, OUTPUT);

while (true)
{
digitalWrite(LED, HIGH);  // 켜기
delay(500); // ms
digitalWrite(LED, LOW);  // 끄기
delay(500);


            printf("hi\n");
}
return 0;
}




4. 툴바에 있는 원격 GDB 디버거를 클릭합니다.




원격 GDB 디버거가 보이지 않는 경우  메뉴에서 도구 옵션을 선택하고...

옵션 창에서 플랫폼 간 > 연결관리자를 선택하면 추가할 수 있습니다.

이 경우 6번을 진행하세요.





5.  예를 클릭합니다.





6. Raspberry Pi에 최초 연결시에만 아래와 같은 창이 보이게 됩니다. 이후 IP가 변경되면 프로젝트 속성에서 변경해줘야 합니다.


호스트 이름에 Raspberry Pi의 아이피를 입력합니다.

사용자 이름과 암호에 각각 pi와 암호를 입력하고 연결을 클릭합니다.





빌드가 완료되면 바로 프로그램이 라즈베리파이에서 실행됩니다.


1>------ 빌드 시작: 프로젝트: Blink1, 구성: Debug ARM ------
1>Validating architecture
1>Validating sources
1>Copying sources remotely to '192.168.0.22'
1>Starting remote build
1>Compiling sources:
1>main.cpp
1>Linking objects
1>Blink1.vcxproj -> c:\Users\webnautes\documents\visual studio 2017\Projects\Blink1\Blink1\bin\ARM\Debug\Blink1.out
1>Invoking gpio export 17 out
========== 빌드: 성공 1, 실패 0, 최신 0, 생략 0 ==========




7. GPIO 17번핀과 그라운드에 LED를 연결해보면 깜빡이는 것을 확인할 수 있습니다.





8. 툴바에서 디버깅 중지(빨간색 네모) 아이콘을 클릭하면 프로그램이 종료되고 LED 깜박임이 중단됩니다.





9. printf문 결과를 Visual Studio에서 보기 위해서는 메뉴에서 프로젝트 속성을 선택하고 디버깅 모드를 gdb로 변경해야 합니다.





10. 다음처럼 hi 문자열이 출력되는 것을 볼 수 있습니다.

Loaded '/lib/ld-linux-armhf.so.3'. Symbols loaded.
Loaded 'linux-vdso.so.1'. Cannot find or open the symbol file.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
Loaded '/usr/lib/arm-linux-gnueabihf/libarmmem.so'. Symbols loaded.
Loaded '/usr/lib/libwiringPi.so'. Symbols loaded.
Loaded '/usr/lib/arm-linux-gnueabihf/libstdc++.so.6'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libm.so.6'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libgcc_s.so.1'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libc.so.6'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libpthread.so.0'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/librt.so.1'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libcrypt.so.1'. Symbols loaded.
hi
hi
hi
hi
hi
hi
kill
'' 프로그램이 종료되었습니다(코드: 0 (0x0)).




3. 프로젝트 생성 2 - ConsoleApplication


1. 이번엔 콘솔 응용 프로그램으로 생성했습니다.





다음과 같은 소스 코드가 생성됩니다.


#include <cstdio>

int main()
{
   printf("hello from ConsoleApplication1!\n");
   return 0;
}




2. 툴바에서 플랫폼을 ARM으로 변경하고 원격 GDB 디버거를 클릭합니다.





3. 예를 클릭합니다.





4. 빌드 후, 실행되면서 다음과 같은 에러가 났습니다.


Loaded 'shared libraries loaded at this time.'. Cannot find or open the symbol file.


Program received signal SIGSEGV, Segmentation fault.

0xfffffffc in ?? ()




5. 메뉴에서 프로젝트 > 속성을 선택하고 디버깅 모드를 gdbserver에서 gdb로 변경해주어 해결되었습니다.





6. 아래 노란줄 처럼 출력결과를 확인할 수 있습니다.


(gdb) 1002-enable-pretty-printing
(gdb) 1004-gdb-set stop-on-solib-events 1
(gdb) 1005-environment-cd ~/projects/ConsoleApplication1/bin/ARM/Debug/
Loaded '/lib/ld-linux-armhf.so.3'. Symbols loaded.
Loaded 'linux-vdso.so.1'. Cannot find or open the symbol file.
Loaded '/usr/lib/arm-linux-gnueabihf/libarmmem.so'. Symbols loaded.
Loaded '/usr/lib/arm-linux-gnueabihf/libstdc++.so.6'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libm.so.6'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libgcc_s.so.1'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libc.so.6'. Symbols loaded.
hello from ConsoleApplication1!
'' 프로그램이 종료되었습니다(코드: 0 (0x0))




4. 참고

https://blogs.msdn.microsoft.com/vcblog/2017/04/11/linux-development-with-c-in-visual-studio/




반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts