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

    From KDE UserBase Wiki
    (Importing a new version from external source)
    No edit summary
     
    (23 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>).


    From here, there are various possibilities you can do: You can execute the current line (<keycap>F10</keycap>, '''gdb's''' "next" command), step into the functions (<keycap>F11</keycap>, '''gdb's''' "step" command), or run to the end of the function (<keycap>F12</keycap>, '''gdb's''' "finish" command). At every stage, '''KDevelop''' updates the variables shown at the left to their current values. You can also hover the mouse over a symbol in your code, e.g. a variable; '''KDevelop''' will then show the current value of that symbol and offer to stop the program during execution the next time this variable's value changes. If you know '''gdb''', you can also click on the <menuchoice>GDB</menuchoice> tool button at the bottom and have the possibility to enter '''gdb''' commands, for example in order to change the value of a variable (for which there doesn't currently seem to be another way).
    Після зупинки ви можете діяти у декілька способів: наказати виконати поточний рядок (<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>
    === Attaching the debugger to a running process ===
    Після зупинки інструмента зневаджування (у точці зупину або у точці виклику <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]]


    Sometimes, one wants to debug a program that's already running. One scenario for this is debugging parallel programs using [https://computing.llnl.gov/tutorials/mpi/ MPI], or for debugging a long running background process. To do this, go to the menu entry <menuchoice>Run -> Attach to Process</menuchoice>, which will open a window like the one above. You will want to select the program that matches your currently open project in '''KDevelop''' - in my case that would be the step-32 program.  
    Іноді виникає потреба у зневаджуванні програми, яку вже запущено. Одним з випадків такої потреби є зневаджування паралельно запущених за допомогою [https://computing.llnl.gov/tutorials/mpi/ MPI] програм або зневаджування довготривалого фонового процесу. Виконати таке зневаджування можна за допомогою пункту меню <menuchoice>Виконання -> Долучити до процесу</menuchoice>, у відповідь на вибір якого буде відкрито вікно, подібне до наведеного вище. Вам потрібно вибрати програму, до процесу якої слід долучитися і отримаєте такий результат:


    This list of programs can be confusing because it is often long as in the case shown here. You can make your life a bit easier by going to the dropdown box at the top right of the window. The default value is <menuchoice>User processes</menuchoice>, i.e. all programs that are run by any of the users currently logged into this machine (if this is your desktop or laptop, you're probably the only such user, apart from root and various service accounts); the list doesn't include processes run by the root user, however. You can limit the list by either choosing <menuchoice>Own processes</menuchoice>, removing all the programs run by other users. Or better still: Select <menuchoice>Programs only</menuchoice>, which removes a lot of processes that are formally running under your name but that you don't usually interact with, such as the window manager, background tasks and so on that are unlikely candidates for debugging.
    [[File:Kdevelop-attach-to-process-refuse.png|500px|thumb|center]]


    Once you have selected a process, attaching to it will get you into '''KDevelop's''' debug mode, open all the usual debugger tool views and stop the program at the position where it happened to be when you attached to it. You may then want to set breakpoints, viewpoints, or whatever else is necessary and continue program execution by going to the menu item <menuchoice>Run -> Continue</menuchoice>.
    Долучення засобу діагностики до запущеної програми типово заборонено у більшості дистрибутивів 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>, — зі списку буде вилучено багато процесів, які формально запущено від вашого імені, але які ви власноруч не запускали, зокрема програма для керування вікнами, фонові завдання тощо навряд чи є достойними кандидатами для зневаджування.
     
    Після вибору процесу, долучення до нього переведе '''KDevelop''' у режим зневаджування, відкриє всі звичайні панелі зневаджування і зупинить програму на рядку, який виконувався під час долучення. На цьому етапі доцільно встановити точки зупину, точки перегляду або налаштувати інші елементи стеження за виконанням, а потім продовжити виконання програми за допомогою пункту меню <menuchoice>Виконання -> Продовжити</menuchoice>.
    <span id="Some useful keyboard shortcuts"></span>
    <span id="Some useful keyboard shortcuts"></span>
    === Some useful keyboard shortcuts ===
    === Деякі корисні клавіатурні скорочення ===


    {| 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)