当前位置:网站首页>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
边栏推荐
- [walking notes]
- Machine learning -- model optimization
- According to the salary statistics of programmers in June 2021, the average salary is 15052 yuan. Are you holding back?
- Loading and using image classification dataset fashion MNIST in pytorch
- RTOS mainstream assessment
- Antd design form verification
- @Excellent you! CSDN College Club President Recruitment!
- [barycentric coordinate interpolation, perspective correction interpolation] principle and usage opinions
- [point cloud series] neural opportunity point cloud (NOPC)
- [indicators] precision, recall
猜你喜欢

Lpddr4 notes

Interface idempotency problem

切线空间(tangent space)
![[official announcement] Changsha software talent training base was established!](/img/ee/0c2775efc4578a008c872022a95559.png)
[official announcement] Changsha software talent training base was established!

TERSUS笔记员工信息516-Mysql查询(2个字段的时间段唯一性判断)

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

Ai21 labs | standing on the shoulders of giant frozen language models

UEFI learning 01-arm aarch64 compilation, armplatformpripeicore (SEC)

FatFs FAT32 learning notes

According to the salary statistics of programmers in June 2021, the average salary is 15052 yuan. Are you holding back?
随机推荐
torch. Where can transfer gradient
kettle庖丁解牛第16篇之输入组件周边讲解
[point cloud series] multi view neural human rendering (NHR)
On the bug of JS regular test method
Machine learning -- model optimization
PyTorch 21. NN in pytorch Embedding module
UEFI learning 01-arm aarch64 compilation, armplatformpripeicore (SEC)
CSDN College Club "famous teacher college trip" -- Hunan Normal University Station
SAP UI5 应用开发教程之七十二 - SAP UI5 页面路由的动画效果设置试读版
Scons build embedded ARM compiler
You and the 42W bonus pool are one short of the "Changsha bank Cup" Tencent yunqi innovation competition!
X509 parsing
Plato farm, a top-level metauniverse game, has made frequent positive moves recently
解决tp6下载报错Could not find package topthink/think with stability stable.
普通大学生如何拿到大厂offer?敖丙教你一招致胜!
Zero copy technology
EMMC / SD learning notes
Aicoco AI frontier promotion (4.23)
Use of GDB
Armv8m (cortex M33) MPU actual combat