GNU/Linux >> Tutoriels Linux >  >> Linux

Définir un point d'arrêt dans le code C ou C++ par programmation pour gdb sous Linux

En regardant ici, j'ai trouvé le chemin suivant :

void main(int argc, char** argv)
{
    asm("int $3");
    int a = 3;
    a++;  //  In gdb> print a;  expect result to be 3
}

Cela me semble un peu hackish. Et je pense que cela ne fonctionne que sur l'architecture x86.


Une façon consiste à signaler une interruption :

#include <csignal>

// Generate an interrupt
std::raise(SIGINT);

En C :

#include <signal.h>
raise(SIGINT);

MISE À JOUR  :Microsoft Docs indique que Windows ne prend pas vraiment en charge SIGINT , donc si la portabilité est un problème, vous feriez probablement mieux d'utiliser SIGABRT .

SIGINT n'est pris en charge pour aucune application Win32. Lorsqu'une interruption CTRL+C se produit, les systèmes d'exploitation Win32 génèrent un nouveau thread pour gérer spécifiquement cette interruption. Cela peut faire en sorte qu'une application monothread, telle qu'une application sous UNIX, devienne multithread et provoque un comportement inattendu.


Dans un projet sur lequel je travaille, nous faisons ceci :

raise(SIGABRT);  /* To continue from here in GDB: "signal 0". */

(Dans notre cas, nous voulions planter dur si cela se produisait en dehors du débogueur, en générant un rapport de plantage si possible. C'est l'une des raisons pour lesquelles nous avons utilisé SIGABRT. Faire cela de manière portable sur Windows, Mac et Linux a pris plusieurs tentatives. Nous nous sommes retrouvés avec quelques #ifdefs, utilement commenté ici :http://hg.mozilla.org/mozilla-central/file/98fa9c0cff7a/js/src/jsutil.cpp#l66 .)


Linux
  1. 5 conseils pour le débogueur GNU

  2. Meilleurs éditeurs JavaScript pour Linux

  3. Meilleures horloges gratuites pour Linux

  4. Comment définir l'ID de processus sous Linux pour un programme spécifique

  5. Définir la date et l'heure du système à l'aide de C++ sous Linux

3 outils en ligne de commande pour simuler la productivité

Commande Linux Changement pour définir le vieillissement du mot de passe pour l'utilisateur

10+ meilleurs IDE Python pour Linux

Dropbox configuré pour un serveur cloud Linux

Comment configurer un killswitch Linux pour les VPN

Comment puis-je profiler du code C++ exécuté sous Linux ?