프로그래밍

리눅스에서 VSCode로 슈퍼유저 UI 디버깅

야라바 2024. 4. 25. 14:27
728x90

요즘 리눅스 개발환경으로 비주얼스튜디오 코드(VisualStudio Code, 이하 코드로 지칭)를 애용하고 있다. 여러 장점이 있지만 무엇보다 gdb와의 연계를 통한 디버깅 기능이다. 일반적으로 최적화 옵션(-O)을 빼고 디버깅 옵션(-g)을 추가하여 빌드하면 대부분 문제없이 디버깅 기능을 사용할 수 있다. 문제는 프로그램이 시스템 장치를 사용하는 경우 sudo로 실행해야 하는데 이런 경우에는 별도의 처리가 필요하다.

 

우선 launch.json 파일에서 위의 그림처럼 "MIMode"는 gdb로 둔 상태에서 "miDebuggerPath"에 자신의 디버거 실행 파일의 경로를 입력한다. 이 파일은 쉘 파일로 이곳에서 gdb를 실행하게 될 것이다.

 

pkexec /usr/bin/gdb "$@"

쉘 파일의 내용은 위와 같다. sudo 수행을 위한 비밀번호를 받아 gdb를 수행하는 형태이다. 대몬과 같이 특별한 UI가 없는 프로그램을 슈퍼유저 권한으로 디버깅하는 경우에는 이것으로도 충분하다. 그런데, UI가 있는 경우는 상황이 달라진다. 필자의 경우에는  LGVL 시뮬레이터를 사용했는데 프로그램은 실행되며 디버깅을 할 수 있지만 UI가 동작하지 않으니 관련 기능은 테스트할 수 없었다.

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
  "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
  "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
  <action id="com.ubuntu.pkexec.gdb">
    <message gettext-domain="gparted">Authentication is required to run gdb</message>
    <icon_name>gdb</icon_name>
    <defaults>
      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gdb</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
  </action>
</policyconfig>

이런 경우 /usr/share/polkit-1/actions/org.freedesktop.gdb.policy라는 파일을 sudo로 만들어서 위와 같은 내용으로 설정해 주어야 한다. allow_gui를 true로 설정해 주는 것이 중요하다. pkexec가 sudo 비밀번호를 받은 다음 GUI가 정상 수행되도록 해준다.

 

 

 

 

 

728x90