当前位置:网站首页>Utilisation de GDB
Utilisation de GDB
2022-04-23 13:39:00 【Stack overflow? Tan90】
GDBUtilisation de
FréquentgdbCommandes de débogage et utilisation
| Nom de la commande | Abréviation de commande | Description de la commande |
|---|---|---|
| run | r | Exécuter un programme |
| continue | c | Laissez le programme en pause continuer |
| break | b | Ajouter un point d'arrêt |
| tbreak | tb | Ajouter un point d'arrêt temporaire |
| backtrace | bt | Voir la pile d'appels pour le thread courant |
| frame | f | Passer à la pile spécifiée par le thread d'appel actuel |
| info | info | Voir le point d'arrêt、Filetage et autres informations |
| enable | enable | Activer un point d'arrêt |
| disable | disable | Désactiver un point d'arrêt |
| delete | del | Supprimer le point d'arrêt |
| list | l | Afficher le Code |
| p | Afficher les valeurs des variables,Par exemple::p + Nom de la variable,Représente la valeur de la variable d'affichage.Vous pouvez aussi ajouter une fonction:p + Fonctions,On peut aussi ajouter des expressions | |
| ptype | ptype | Afficher les types de variables |
| thread | thread | Passer au thread spécifié |
| next | n | Passer à la ligne suivante |
| step | s | Exécuter l'instruction de ligne courante,Si l'instruction est un appel de fonction,Entrez la fonction pour exécuter la première instruction Attention!:Si la fonction est une fonction de bibliothèque ou une fonction fournie par un tiers,AvecsJe ne peux pas entrer.,Parce qu'il n'y a pas de code source,Si c'est une fonction personnalisée,Tant qu'il y a un code source, vous pouvez entrer |
| until | u | Exécuter sur la ligne spécifiée,Arrête |
| finish | fi | Fin de la fonction d'appel courante,Au niveau supérieur de l'utilité de l'ajustement de fonction |
| return | return | Termine la fonction d'appel courante et renvoie la valeur spécifiée ,Au niveau supérieur de l'utilité de l'ajustement de fonction |
| jump | j | Sauter le flux d'exécution du programme actuel à la ligne ou à l'adresse spécifiée |
| disassemble | dis | Voir le Code d'assemblage |
| set args | Définir les paramètres du programme principal Méthode de réglage: (gdb)set args +Paramètres1 + Paramètres2 |
|
| set var | Définir la valeur de la variable, Supposons que le programme ait deux variables :Par exemple:int i;char arr[20]; set var i = 10; Prends ça.iLa valeur de est définie à10; set var arr = “string”; Prends ça.arrLa valeur de est définie à”string“,Attention, non.strcpy |
|
| show args | Afficher les paramètres de la ligne de commande pour les paramètres | |
| watch | watch | Surveille si la valeur d'une variable ou d'une adresse mémoire a changé |
| display | display | Variables surveillées ou adresses mémoire , Sortie automatique des variables surveillées ou des adresses mémoire après une interruption de programme |
| dir | dir | Rediriger l'emplacement du fichier source |
Attention!
Il est nécessaire d'ajouter -gOptions, Il est également recommandé de désactiver les options d'optimisation pour le programme compilateur , L'optimisation du programme compilateur est généralement 5Niveaux,C'est - à - dire:O0-O4,Parmi euxO0Indique qu'il n'est pas optimisé,DeO1-O4, Niveau d'optimisation de plus en plus élevé .RecommandéO0.
DémarragegdbMéthode de mise en service
Utilisergdb Il y a généralement trois façons de déboguer un programme :
-
Débogage direct du programme cible : gdb + filename
-
attachAu processus:gdb + attach + pid
- Quand un programme a été lancé , Mais aussi pour déboguer le programme ,Alors il fautgdb attch + Processus à déboguer id.En serviceattach Après le processus cible , Le débogueur s'arrêtera ,Pour le moment, utilisez directementcontinue La commande permet au programme de continuer .
- Si vous voulez terminer le débogage après avoir terminé le programme , Sans aucun effet sur le processus actuel ,Ça pourrait être dansgdb Entrée de l'interface de commande pour detach Le programme de commande est séparé du débogueur .
-
Mise en servicecoreDocumentation– Problème de fuite du processus de localisation :gdb + filename corename
-
linux Par défaut, le système n'ouvre pas le programme lorsqu'il s'écrase core Cette fonction de fichier ,Peut être utiliséulimit -c Pour voir si le système active cette fonction .Si vous découvrezcore file size- Oui.0Et si, Indique que la construction est fermée coreOptions pour les fichiers,Peut passerulimit + Nom de l'option + SetPoint Pour modifier. Peut être changée en taille maximale admissible ,Par exemple:1024, Indique le maximum généré coreLa taille du fichier est1024KB; Peut également être changé en infini ,Par exemple:ulimit -c unlimited
-
Attention!: Après avoir fermé la session , Cette valeur deviendra 0. Si vous voulez que cette option prenne effet de façon permanente ,Il y a deux façons de régler:
-
In/etc/security/limits.confAjouter une ligne:
#<domain> <type> <item> <value> * soft core unlimited -
Prends ça.ulimit -c unlimitedAjouter à/etc/profileDans le document, Mettez - le sur la dernière ligne . Exécution après modification réussie
source /etc/profileLa configuration peut prendre effet immédiatement . Bien sûr que ça ne fonctionne que pour rootUtilisateurs, Si vous voulez agir uniquement sur un utilisateur ,Tu peux mettreulimit -c unlimited Ajouter à l'utilisateur correspondant ~/.bashrcOu ~/.bash_profileDans le document -
Produitcore Le nom par défaut du fichier est core.pid. L'emplacement est dans le répertoire où se trouve le programme crash .
-
-
Si, Quand plusieurs programmes s'écrasent en même temps ,Impossible de partir decore Le nom du fichier correspond à quel service ,Comment le résoudre??
-
Mode 1: Au début du programme est enregistré pid
-
Mode 2:Personnalisationcore Nom et Répertoire du fichier
-
/proc/sys/kernel/core_uses_pid Peut être contrôlé dans la production de core Ajouter ou non au nom du fichier pidComme extension,Si ajouté, le contenu du fichier est1,Sinon0
-
/proc/sys/kernel/core_patternPeut être formatécoreFichier enregistrer l'emplacement ou le nom du fichier.Modifier comme suit::
echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_patternNom du paramètre Signification des paramètres %p AjouterpidÀcoreDans le nom du fichier %u Ajouter le courantuidÀcoreDans le nom du fichier %g Ajouter le courantgidÀcoreDans le nom du fichier %s Ajouter conduit àcore Le signal de coreDans le document %t AjoutercoreTemps de génération du fichier(UNIX)ÀcoreDans le document %h Ajouter un nom d'hôte à coreDans le nom du fichier %e Ajouter un nom de programme à coreDans le nom du fichier
-
-
-
gdb Débogage d'une méthode multithreadée
-
Utilisergdb Après avoir lancé le programme ,Utiliserctrl + c Interrompre le programme ,Utiliserinfo threads Commande pour voir combien de Threads le processus actuel a .
-
Peut être utiliséthread + Le numéro de fil passe au fil correspondant ,UtiliserbtAfficher la pile d'appels pour le thread
-
Parfois, dans des situations multithreadées , Je veux juste déboguer un thread , Au lieu de passer à un autre thread , Vous pouvez utiliser l'option de verrouiller le thread de débogage actuel
scheduler-lockingCette option a trois valeurs ,Respectivement.on(Verrouillé.)、step(Verrouillé.)、off(Relâchez la serrure.).Utiliser comme suit:set scheduler-locking on/step/off- onEtstepLa différence:Set toonHeure,Exécution actuelle du threadnext、step、until、finish、returnAu moment de l'ordre, Aucun autre thread n'exécutera .EtstepSi et seulement sinext、step La commande Verrouille le fil courant ,Utiliseruntil、finish、return Attendez les commandes de débogage dans le thread ( Commande de débogage non en une seule étape ), D'autres Threads ont une chance de fonctionner .
gdb Débogage d'une méthode Multi - processus
-
Méthode 1:MaintenantshellUtilisé dans la fenêtregdbDébogage du processus parent, Quand le processus enfant est forkEn sortant, En rouvrant un shellUtilisation des fenêtresgdbattach Les commandes serontgdb attach Au sous - processus .
-
Mode 2:gdb Le débogueur offre follow-forkOptions,Adoptionset follow-fork mode Mettre en place un processus fork Un nouveau sous - processus fait ,gdb Continuer à déboguer le processus parent ou le processus Enfant .
1. Débogage du processus parent:set follow-fork-mode parent(Par défaut) 2. Débogage des sous - processus:set follow-fork-mode child 3. Définir le mode de débogage:set detach-on-fork [on|off] 1. Par défauton; Indique quand déboguer le processus actuel , Les autres processus continuent 2. off: Lors du débogage du processus actuel , D'autres processus sont gdbEn attente 4. Voir le processus de débogage:info inferiors 5. Basculer le processus de débogage actuel :inferior + ProcessusID 6. Attention!: Pour changer le débogage du processus, vous devez définir le mode de débogage à off
Références《c++Essence du développement du serveur》
Si cet article vous aide,Souviens - toi d'un bouton trois fois,Un bouton et trois rires,Capacité de codage supérieure!
Mes capacités sont limitées,En cas d'erreur,J'espère que vous me corrigerez;L'originalité n'est pas facile,Bienvenue à la réimpression,Veuillez indiquer la source de la réimpression.!
版权声明
本文为[Stack overflow? Tan90]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204231333555171.html
边栏推荐
- TIA博途中基于高速计数器触发中断OB40实现定点加工动作的具体方法示例
- SHA512 / 384 principle and C language implementation (with source code)
- [point cloud series] so net: self organizing network for point cloud analysis
- 【视频】线性回归中的贝叶斯推断与R语言预测工人工资数据|数据分享
- [andorid] realize SPI communication between kernel and app through JNI
- Detailed explanation of ADB shell top command
- 面试官给我挖坑:URI中的 “//” 有什么用?
- Super 40W bonus pool waiting for you to fight! The second "Changsha bank Cup" Tencent yunqi innovation competition is hot!
- Playwright contrôle l'ouverture de la navigation Google locale et télécharge des fichiers
- Explanation of input components in Chapter 16
猜你喜欢

"Xiangjian" Technology Salon | programmer & CSDN's advanced road

Plato farm, a top-level metauniverse game, has made frequent positive moves recently

Logstash数据处理服务的输入插件Input常见类型以及基本使用
![[quick platoon] 215 The kth largest element in the array](/img/14/8cd1c88a7c664738d67dcaca94985d.png)
[quick platoon] 215 The kth largest element in the array

SHA512 / 384 principle and C language implementation (with source code)

Tersus notes employee information 516 MySQL query (time period uniqueness judgment of 2 fields)

集简云 x 飞书深诺,助力企业运营部实现自动化办公

超40W奖金池等你来战!第二届“长沙银行杯”腾讯云启创新大赛火热来袭!

Xi'an CSDN signed a contract with Xi'an Siyuan University, opening a new chapter in IT talent training

Vscode tips
随机推荐
According to the salary statistics of programmers in June 2021, the average salary is 15052 yuan. Are you holding back?
十万大学生都已成为猿粉,你还在等什么?
UEFI learning 01-arm aarch64 compilation, armplatformpripeicore (SEC)
[dynamic programming] 221 Largest Square
Comparison and summary of applicable scenarios of Clickhouse and MySQL database
[notes de marche]
“湘见”技术沙龙 | 程序员&CSDN的进阶之路
FatFs FAT32 learning notes
EMMC / SD learning notes
切线空间(tangent space)
ESP32 VHCI架构传统蓝牙设置scan mode,让设备能被搜索到
vscode小技巧
Scons build embedded ARM compiler
2020最新Android大厂高频面试题解析大全(BAT TMD JD 小米)
Launcher hides app icons that do not need to be displayed
2021年6月程序员工资统计,平均15052元,你拖后腿了吗?
Common interview questions and detailed analysis of the latest Android developers in 2020
Isparta is a tool that generates webp, GIF and apng from PNG and supports the transformation of webp, GIF and apng
Imx6ull QEMU bare metal tutorial 2: usdhc SD card
Common analog keys of ADB shell: keycode