当前位置:网站首页>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/profile
La 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_pattern
Nom 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-locking
Cette 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
边栏推荐
- 联想拯救者Y9000X 2020
- [point cloud series] so net: self organizing network for point cloud analysis
- Aicoco AI frontier promotion (4.23)
- 你和42W奖金池,就差一次“长沙银行杯”腾讯云启创新大赛!
- Example interview | sun Guanghao: College Club grows and starts a business with me
- @Excellent you! CSDN College Club President Recruitment!
- Usereducer basic usage
- The difference between string and character array in C language
- How to build a line of code with M4 qprotex
- [indicators] precision, recall
猜你喜欢
为什么从事云原生开发需要学习容器技术
Zero copy technology
联想拯救者Y9000X 2020
SHA512 / 384 principle and C language implementation (with source code)
[point cloud series] summary of papers related to implicit expression of point cloud
[point cloud series] so net: self organizing network for point cloud analysis
LeetCode_DFS_中等_695.岛屿的最大面积
Unified task distribution scheduling execution framework
Loading and using image classification dataset fashion MNIST in pytorch
交叉碳市场和 Web3 以实现再生变革
随机推荐
Common analog keys of ADB shell: keycode
校园外卖系统 - 「农职邦」微信原生云开发小程序
解决tp6下载报错Could not find package topthink/think with stability stable.
Longitude and latitude position of provincial capitals in China
[dynamic programming] 221 Largest Square
Solve tp6 download error course not find package topthink / think with stability stable
Bottomsheetdialogfragment + viewpager + fragment + recyclerview sliding problem
Is Hongmeng system plagiarism? Or the future? Professional explanation that can be understood after listening in 3 minutes
【视频】线性回归中的贝叶斯推断与R语言预测工人工资数据|数据分享
Lpddr4 notes
playwright控制本地穀歌瀏覽打開,並下載文件
Common interview questions and detailed analysis of the latest Android developers in 2020
集简云 x 飞书深诺,助力企业运营部实现自动化办公
Tersus notes employee information 516 MySQL query (time period uniqueness judgment of 2 fields)
[multi screen interaction] realize dual multi screen display II: startactivity mode
web三大组件之Filter、Listener
Ai21 labs | standing on the shoulders of giant frozen language models
What do the raddr and rport in webrtc ice candidate mean?
@优秀的你!CSDN高校俱乐部主席招募!
Solve the problem that Oracle needs to set IP every time in the virtual machine