KDevelop5/Manual/Debugging programs/uk: Difference between revisions

    From KDE UserBase Wiki
    (Importing a new version from external source)
    No edit summary
     
    (17 intermediate revisions by 3 users not shown)
    Line 7: Line 7:
    Після того, як запуск програми буде налаштовано (див. [[Special:myLanguage/KDevelop5/Manual/Running programs|Запуск програм]]), ви зможете запускати програму під керуванням інструмента зневаджування: скористайтеся пунктом меню <menuchoice>Виконання -> Зневаджувальний запуск</menuchoice> або натисніть клавішу <keycap>F9</keycap>. Якщо ви знайомі з роботою '''gdb''', результат буде той самий, що і після запуску '''gdb''' з вказаним виконуваним файлом у налаштуваннях запуску з наступною командою <code>Run</code>. Це означає, що якщо програмою буде десь викликано <code>abort()</code> (наприклад, якщо оператором контролю буде виявлено помилку) або якщо буде виявлено помилку сегментування, інструмент зневаджування зупинить роботу програми. З іншого боку, якщо програма зможе виконати роботу до кінця (правильно чи неправильно), інструмент зневаджування не зупинятиме її роботу, аж доки ця робота не завершиться сама. У такому разі вам можуть знадобитися встановлені ще до запуску програми точки зупину у всіх рядках коду, де інструмент зневаджування має зупиняти роботу програми. Встановити такі точки зупину можна встановленням курсора у відповідному рядку з наступним вибором пункту меню <menuchoice>Виконання -> Встановити/зняти точку зупину</menuchoice> або використанням пункту контекстного меню (викликається клацанням правою кнопкою миші) <menuchoice>Встановити/зняти точку зупину</menuchoice>.
    Після того, як запуск програми буде налаштовано (див. [[Special:myLanguage/KDevelop5/Manual/Running programs|Запуск програм]]), ви зможете запускати програму під керуванням інструмента зневаджування: скористайтеся пунктом меню <menuchoice>Виконання -> Зневаджувальний запуск</menuchoice> або натисніть клавішу <keycap>F9</keycap>. Якщо ви знайомі з роботою '''gdb''', результат буде той самий, що і після запуску '''gdb''' з вказаним виконуваним файлом у налаштуваннях запуску з наступною командою <code>Run</code>. Це означає, що якщо програмою буде десь викликано <code>abort()</code> (наприклад, якщо оператором контролю буде виявлено помилку) або якщо буде виявлено помилку сегментування, інструмент зневаджування зупинить роботу програми. З іншого боку, якщо програма зможе виконати роботу до кінця (правильно чи неправильно), інструмент зневаджування не зупинятиме її роботу, аж доки ця робота не завершиться сама. У такому разі вам можуть знадобитися встановлені ще до запуску програми точки зупину у всіх рядках коду, де інструмент зневаджування має зупиняти роботу програми. Встановити такі точки зупину можна встановленням курсора у відповідному рядку з наступним вибором пункту меню <menuchoice>Виконання -> Встановити/зняти точку зупину</menuchoice> або використанням пункту контекстного меню (викликається клацанням правою кнопкою миші) <menuchoice>Встановити/зняти точку зупину</menuchoice>.


    [[Image:kdevelop-4.png|center|thumb|550px]]
    [[File:Kdevelop-debug-bus-main.png|550px|thumb|center]]


    Запуск програми у зневаднику переведе '''KDevelop''' у інший режим: всі кнопки інструментів на периметрі головного вікна програми буде замінено на відповідні кнопки зневаджування, а не редагування. Визначити режим, у якому працює програма можна за верхньою правою частиною вікна: там ви побачите вкладки з назвами <menuchoice>Перегляд</menuchoice>, <menuchoice>Зневаджування</menuchoice> та <menuchoice>Код</menuchoice>. Натискання заголовків цих вкладок надає змогу перемикатися між трьома режимами. У кожного з режимів є власний набір інструментів, налаштувати їхній перелік можна у такий само спосіб, у який ми налаштовували інструменти режиму <menuchoice>Код</menuchoice> у розділі [[KDevelop5/Manual/Working_with_source_code#Tools and views|Інструменти та панелі перегляду]].
    Запуск програми у зневаднику переведе '''KDevelop''' у інший режим: всі кнопки інструментів на периметрі головного вікна програми буде замінено на відповідні кнопки зневаджування, а не редагування. Визначити режим, у якому працює програма можна за верхньою правою частиною вікна: там ви побачите кнопку із назвою <menuchoice>Код</menuchoice> у режимі редагування і кнопку із назвою <menuchoice>Діагностика</menuchoice> у режимі діагностики. Натискання цих кнопок надає змогу перемикатися між двома режимами. У кожного з режимів є власний набір інструментів, налаштувати їхній перелік можна у такий само спосіб, у який ми налаштовували інструменти режиму <menuchoice>Код</menuchoice> у розділі [[KDevelop5/Manual/Working_with_source_code#Tools and views|Інструменти та панелі перегляду]].


    Після зупинки інструмента зневаджування (у точці зупину або у точці виклику <code>abort()</code>) ви зможете вивчити різноманітні дані щодо роботи програми. Наприклад, на наведеному вище зображенні нами вибрано інструмент <menuchoice>Стек викликів</menuchoice> у нижній частині (приблизний еквівалент команд "backtrace" та "info threads" у  '''gdb'''), отже показано список запущених потоків виконання ліворуч (у нашому прикладі таких потоків 8) та спосіб переходу до поточної точки зупину праворуч (у нашому прикладі <code>main()</code> викликано <code>run()</code>; список був би довшим, якби ми зупинилися у функції, викликаній з <code>run()</code>). Ліворуч можна бачити локальні змінні, зокрема поточний об’єкт (об’єкт, на який вказує змінна <code>this</code>).
    Після зупинки інструмента зневаджування (у точці зупину або у точці виклику <code>abort()</code>) ви зможете вивчити різноманітні дані щодо роботи програми. Наприклад, на наведеному вище зображенні нами вибрано інструмент <menuchoice>Діагностика</menuchoice> для перегляду виведених програмами даних. Інструмент <menuchoice>Стос фреймів</menuchoice> у нижній частині (приблизний еквівалент команд "backtrace" та "info threads" у  '''gdb'''), отже показано список запущених потоків виконання ліворуч та спосіб переходу до поточної точки зупину праворуч (у нашому прикладі <code>main()</code> викликано <code>Bus bus;</code>; список був би довшим, якби ми зупинилися у функції, викликаній з <code>bus</code>). Ліворуч можна бачити локальні змінні, зокрема поточний об'єкт (об'єкт, на який вказує змінна <code>this</code>).


    Після зупинки ви можете діяти у декілька способів: наказати виконати поточний рядок (<keycap>F10</keycap>, команда «next» '''gdb'''), увійти до функції (<keycap>F11</keycap>, команда «step» у '''gdb''') або виконати інструкції до кінця функції (<keycap>F12</keycap>, команда «finish» '''gdb'''). На кожному з етапів виконання '''KDevelop''' оновлюватиме значення змінних, показані ліворуч. Ви також можете просто навести вказівник миші на частину коду, наприклад, назву змінної, і '''KDevelop''' покаже поточне значення та запропонує зупинити виконання програми під час наступної зміни значення змінної. Якщо ви знайомі з '''gdb''', ви також можете натиснути кнопку інструмента <menuchoice>GDB</menuchoice> у нижній частині вікна і отримати змогу вводити команди '''gdb''' безпосередньо, наприклад, для того, щоб змінити значення змінної (у поточній версії середовища, здається, не передбачено іншого способу).
    Після зупинки ви можете діяти у декілька способів: наказати виконати поточний рядок (<keycap>F10</keycap>, команда «next» '''gdb'''), увійти до функції (<keycap>F11</keycap>, команда «step» у '''gdb''') або виконати інструкції до кінця функції (<keycap>F12</keycap>, команда «finish» '''gdb'''). На кожному з етапів виконання '''KDevelop''' оновлюватиме значення змінних, показані ліворуч. Ви також можете просто навести вказівник миші на частину коду, наприклад, назву змінної, і '''KDevelop''' покаже поточне значення та запропонує зупинити виконання програми під час наступної зміни значення змінної. Якщо ви знайомі з '''gdb''', ви також можете натиснути кнопку інструмента <menuchoice>GDB</menuchoice> у нижній частині вікна і отримати змогу вводити команди '''gdb''' безпосередньо, наприклад, для того, щоб змінити значення змінної (у поточній версії середовища, здається, не передбачено іншого способу).
    <span id="Attaching the debugger to a running process"></span>
    <span id="Attaching the debugger to a running process"></span>
    === Приєднання програми для зневаджування до запущеного процесу ===
    Після зупинки інструмента зневаджування (у точці зупину або у точці виклику <code>abort()</code>) ви зможете вивчити різноманітні дані щодо роботи програми. Наприклад, на наведеному вище зображенні нами вибрано інструмент <menuchoice>Діагностика</menuchoice> для перегляду виведених програмами даних. Інструмент <menuchoice>Стос фреймів</menuchoice> у нижній частині (приблизний еквівалент команд "backtrace" та "info threads" у  '''gdb'''), отже показано список запущених потоків виконання ліворуч та спосіб переходу до поточної точки зупину праворуч (у нашому прикладі <code>main()</code> викликано <code>Bus bus;</code>; список був би довшим, якби ми зупинилися у функції, викликаній з <code>bus</code>). Ліворуч можна бачити локальні змінні, зокрема поточний об'єкт (об'єкт, на який вказує змінна <code>this</code>).


    [[Image:kdevelop-9.png|center|thumb|300px]]
    [[File:Kdevelop-attach-to-process.png|400px|thumb|center]]


    Іноді виникає потреба у зневаджуванні програми, яку вже запущено. Одним з випадків такої потреби є зневаджування паралельно запущених за допомогою [https://computing.llnl.gov/tutorials/mpi/ MPI] програм або зневаджування довготривалого фонового процесу. Виконати таке зневаджування можна за допомогою пункту меню <menuchoice>Виконання -> Долучити до процесу</menuchoice>, у відповідь на вибір якого буде відкрито вікно, подібне до наведеного вище. Вам потрібно вибрати програму, яка відповідає поточному відкритому проекту у '''KDevelop''' — у нашому випадку такою програмою буде step-32.  
    Іноді виникає потреба у зневаджуванні програми, яку вже запущено. Одним з випадків такої потреби є зневаджування паралельно запущених за допомогою [https://computing.llnl.gov/tutorials/mpi/ MPI] програм або зневаджування довготривалого фонового процесу. Виконати таке зневаджування можна за допомогою пункту меню <menuchoice>Виконання -> Долучити до процесу</menuchoice>, у відповідь на вибір якого буде відкрито вікно, подібне до наведеного вище. Вам потрібно вибрати програму, до процесу якої слід долучитися і отримаєте такий результат:
     
    [[File:Kdevelop-attach-to-process-refuse.png|500px|thumb|center]]
     
    Долучення засобу діагностики до запущеної програми типово заборонено у більшості дистрибутивів Linux. Щоб виконати таке долучення, вам слід знати трохи більше про систему ''PTRACE'', яка використовується для діагностики. Загалом, типовим значенням параметра є «1». Це значення обмежує PTRACE лише до безпосередньо дочірніх процесів (наприклад, «gdb назва_програми» і «strace -f назва_програми» працюють, але «attach» gdb та «strace -fp $PID» не працюватимуть). Область PTRACE «0» є ще лояльнішим режимом.
     
    В Ubuntu існує два способи змінити це. Якщо ви працюєте у іншому дистрибутиві, ваші вимоги можуть бути іншими. В Ubuntu пеншим способом є редагування файла <tt>/etc/sysctl.d/10-ptrace.conf</tt> та зміна <tt>kernel.yama.ptrace_scope</tt> на 0.
    Після редагування файла віддайте таку команду:
    {{Input|1=<nowiki>sudo service procps restart</nowiki>}} Після цього ви зможете долучатися до запущеного процесу.
     
    Іншим способом, який є безпечнішим, є така команда:
    {{Input|1=<nowiki>echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope</nowiki>}}
    якщо ви хочете скористатися цією можливістю, і:
    {{Input|1=<nowiki>echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope</nowiki>}}
    коли ви хочете долучитися до запущеного процесу.
     
    Після встановлення для вашого <tt>ptrace_scope</tt> значення 0 вам варто вибрати програму, яка відповідає вашому поточному відкритому у '''KDevelop''' проєкту.


    Цей список програм може бути доволі довгим, як у нашому прикладі. Ви можете дещо спростити собі роботу за допомогою спадного списку у верхній частині вікна. Типовим пунктом цього списку є <menuchoice>Процеси користувачів</menuchoice>, тобто всі програми, запущені всіма користувачами, які працюють у системі (якщо ви працюєте за власним стаціонарним або портативним комп’ютером, ймовірно, ви є єдиним користувачем, окрім користувача root та різноманітних облікових записів служб); у списку не буде процесів користувача root. Обмежити перелік процесів можна за допомогою пункту <menuchoice>Власні процеси</menuchoice>, його вибір призведе до вилучення зі списку програм, запущених іншими користувачами. Кращим варіантом є вибір пункту <menuchoice>Лише програми</menuchoice>, — зі списку буде вилучено багато процесів, які формально запущено від вашого імені, але які ви власноруч не запускали, зокрема програма для керування вікнами, фонові завдання тощо навряд чи є достойними кандидатами для зневаджування.
    Цей список програм може бути доволі довгим, як у нашому прикладі. Ви можете дещо спростити собі роботу за допомогою спадного списку у верхній частині вікна. Типовим пунктом цього списку є <menuchoice>Процеси користувачів</menuchoice>, тобто всі програми, запущені всіма користувачами, які працюють у системі (якщо ви працюєте за власним стаціонарним або портативним комп’ютером, ймовірно, ви є єдиним користувачем, окрім користувача root та різноманітних облікових записів служб); у списку не буде процесів користувача root. Обмежити перелік процесів можна за допомогою пункту <menuchoice>Власні процеси</menuchoice>, його вибір призведе до вилучення зі списку програм, запущених іншими користувачами. Кращим варіантом є вибір пункту <menuchoice>Лише програми</menuchoice>, — зі списку буде вилучено багато процесів, які формально запущено від вашого імені, але які ви власноруч не запускали, зокрема програма для керування вікнами, фонові завдання тощо навряд чи є достойними кандидатами для зневаджування.
    Line 28: Line 44:


    {| class="tablecenter" style="border:1px solid"
    {| class="tablecenter" style="border:1px solid"
    ! colspan="2" style="background:#ffff99;" | Debugging
    ! colspan="2" style="background:#ffff99;" | Зневаджування
    |-
    |-


    | F10  
    | F10  
    | Step over (gdb's "next")
    | Перейти до наступної інструкції ("next" у gdb)
    |-
    |-


    | F11  
    | F11  
    | Step into (gdb's "step")
    | Увійти у наступну інструкцію ("step" у gdb)
    |-
    |-


    | F12
    | F12
    | Step out of (gdb's "finish")
    | Вийти з інструкції ("finish" у gdb)
    |}
    |}


    {{Prevnext2
    {{Prevnext2
    | prevpage=Special:MyLanguage/KDevelop5/Manual/Running_programs | nextpage=Special:MyLanguage/KDevelop5/Manual/Working_with_version_control_systems
    | prevpage=Special:MyLanguage/KDevelop5/Manual/Running_programs | nextpage=Special:MyLanguage/KDevelop5/Manual/Working_with_version_control_systems
    | prevtext=Running programs | nexttext=Working with version control systems
    | prevtext=Запуск програм | nexttext=Робота з системами керування версіями
    | index=Special:MyLanguage/KDevelop5/Manual | indextext=Back to menu
    | index=Special:MyLanguage/KDevelop5/Manual | indextext=Повернутися до меню
    }}
    }}


    [[Category:Development]]
    [[Category:Розробка/uk]]

    Latest revision as of 09:39, 14 September 2020

    Other languages:

    Зневаджування програм у KDevelop

    Запуск програми під керуванням програми для зневаджування

    Після того, як запуск програми буде налаштовано (див. Запуск програм), ви зможете запускати програму під керуванням інструмента зневаджування: скористайтеся пунктом меню Виконання -> Зневаджувальний запуск або натисніть клавішу F9. Якщо ви знайомі з роботою gdb, результат буде той самий, що і після запуску gdb з вказаним виконуваним файлом у налаштуваннях запуску з наступною командою Run. Це означає, що якщо програмою буде десь викликано abort() (наприклад, якщо оператором контролю буде виявлено помилку) або якщо буде виявлено помилку сегментування, інструмент зневаджування зупинить роботу програми. З іншого боку, якщо програма зможе виконати роботу до кінця (правильно чи неправильно), інструмент зневаджування не зупинятиме її роботу, аж доки ця робота не завершиться сама. У такому разі вам можуть знадобитися встановлені ще до запуску програми точки зупину у всіх рядках коду, де інструмент зневаджування має зупиняти роботу програми. Встановити такі точки зупину можна встановленням курсора у відповідному рядку з наступним вибором пункту меню Виконання -> Встановити/зняти точку зупину або використанням пункту контекстного меню (викликається клацанням правою кнопкою миші) Встановити/зняти точку зупину.

    Запуск програми у зневаднику переведе KDevelop у інший режим: всі кнопки інструментів на периметрі головного вікна програми буде замінено на відповідні кнопки зневаджування, а не редагування. Визначити режим, у якому працює програма можна за верхньою правою частиною вікна: там ви побачите кнопку із назвою Код у режимі редагування і кнопку із назвою Діагностика у режимі діагностики. Натискання цих кнопок надає змогу перемикатися між двома режимами. У кожного з режимів є власний набір інструментів, налаштувати їхній перелік можна у такий само спосіб, у який ми налаштовували інструменти режиму Код у розділі Інструменти та панелі перегляду.

    Після зупинки інструмента зневаджування (у точці зупину або у точці виклику abort()) ви зможете вивчити різноманітні дані щодо роботи програми. Наприклад, на наведеному вище зображенні нами вибрано інструмент Діагностика для перегляду виведених програмами даних. Інструмент Стос фреймів у нижній частині (приблизний еквівалент команд "backtrace" та "info threads" у gdb), отже показано список запущених потоків виконання ліворуч та спосіб переходу до поточної точки зупину праворуч (у нашому прикладі main() викликано Bus bus;; список був би довшим, якби ми зупинилися у функції, викликаній з bus). Ліворуч можна бачити локальні змінні, зокрема поточний об'єкт (об'єкт, на який вказує змінна this).

    Після зупинки ви можете діяти у декілька способів: наказати виконати поточний рядок (F10, команда «next» gdb), увійти до функції (F11, команда «step» у gdb) або виконати інструкції до кінця функції (F12, команда «finish» gdb). На кожному з етапів виконання KDevelop оновлюватиме значення змінних, показані ліворуч. Ви також можете просто навести вказівник миші на частину коду, наприклад, назву змінної, і KDevelop покаже поточне значення та запропонує зупинити виконання програми під час наступної зміни значення змінної. Якщо ви знайомі з gdb, ви також можете натиснути кнопку інструмента GDB у нижній частині вікна і отримати змогу вводити команди gdb безпосередньо, наприклад, для того, щоб змінити значення змінної (у поточній версії середовища, здається, не передбачено іншого способу). Після зупинки інструмента зневаджування (у точці зупину або у точці виклику abort()) ви зможете вивчити різноманітні дані щодо роботи програми. Наприклад, на наведеному вище зображенні нами вибрано інструмент Діагностика для перегляду виведених програмами даних. Інструмент Стос фреймів у нижній частині (приблизний еквівалент команд "backtrace" та "info threads" у gdb), отже показано список запущених потоків виконання ліворуч та спосіб переходу до поточної точки зупину праворуч (у нашому прикладі main() викликано Bus bus;; список був би довшим, якби ми зупинилися у функції, викликаній з bus). Ліворуч можна бачити локальні змінні, зокрема поточний об'єкт (об'єкт, на який вказує змінна this).

    Іноді виникає потреба у зневаджуванні програми, яку вже запущено. Одним з випадків такої потреби є зневаджування паралельно запущених за допомогою MPI програм або зневаджування довготривалого фонового процесу. Виконати таке зневаджування можна за допомогою пункту меню Виконання -> Долучити до процесу, у відповідь на вибір якого буде відкрито вікно, подібне до наведеного вище. Вам потрібно вибрати програму, до процесу якої слід долучитися і отримаєте такий результат:

    Долучення засобу діагностики до запущеної програми типово заборонено у більшості дистрибутивів Linux. Щоб виконати таке долучення, вам слід знати трохи більше про систему PTRACE, яка використовується для діагностики. Загалом, типовим значенням параметра є «1». Це значення обмежує PTRACE лише до безпосередньо дочірніх процесів (наприклад, «gdb назва_програми» і «strace -f назва_програми» працюють, але «attach» gdb та «strace -fp $PID» не працюватимуть). Область PTRACE «0» є ще лояльнішим режимом.

    В Ubuntu існує два способи змінити це. Якщо ви працюєте у іншому дистрибутиві, ваші вимоги можуть бути іншими. В Ubuntu пеншим способом є редагування файла /etc/sysctl.d/10-ptrace.conf та зміна kernel.yama.ptrace_scope на 0. Після редагування файла віддайте таку команду:

    sudo service procps restart

    Після цього ви зможете долучатися до запущеного процесу.

    Іншим способом, який є безпечнішим, є така команда:

    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

    якщо ви хочете скористатися цією можливістю, і:

    echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope

    коли ви хочете долучитися до запущеного процесу.

    Після встановлення для вашого ptrace_scope значення 0 вам варто вибрати програму, яка відповідає вашому поточному відкритому у KDevelop проєкту.

    Цей список програм може бути доволі довгим, як у нашому прикладі. Ви можете дещо спростити собі роботу за допомогою спадного списку у верхній частині вікна. Типовим пунктом цього списку є Процеси користувачів, тобто всі програми, запущені всіма користувачами, які працюють у системі (якщо ви працюєте за власним стаціонарним або портативним комп’ютером, ймовірно, ви є єдиним користувачем, окрім користувача root та різноманітних облікових записів служб); у списку не буде процесів користувача root. Обмежити перелік процесів можна за допомогою пункту Власні процеси, його вибір призведе до вилучення зі списку програм, запущених іншими користувачами. Кращим варіантом є вибір пункту Лише програми, — зі списку буде вилучено багато процесів, які формально запущено від вашого імені, але які ви власноруч не запускали, зокрема програма для керування вікнами, фонові завдання тощо навряд чи є достойними кандидатами для зневаджування.

    Після вибору процесу, долучення до нього переведе KDevelop у режим зневаджування, відкриє всі звичайні панелі зневаджування і зупинить програму на рядку, який виконувався під час долучення. На цьому етапі доцільно встановити точки зупину, точки перегляду або налаштувати інші елементи стеження за виконанням, а потім продовжити виконання програми за допомогою пункту меню Виконання -> Продовжити.

    Деякі корисні клавіатурні скорочення

    Зневаджування
    F10 Перейти до наступної інструкції ("next" у gdb)
    F11 Увійти у наступну інструкцію ("step" у gdb)
    F12 Вийти з інструкції ("finish" у gdb)