GNU/Linux >> Tutoriales Linux >  >> Linux

Establezca un punto de interrupción en el código C o C ++ mediante programación para gdb en Linux

Al buscar aquí, encontré la siguiente manera:

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

Esto me parece un poco hackish. Y creo que esto solo funciona en la arquitectura x86.


Una forma es señalar una interrupción:

#include <csignal>

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

En C:

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

ACTUALIZAR :Microsoft Docs dice que Windows realmente no es compatible con SIGINT , por lo que si la portabilidad es una preocupación, probablemente sea mejor usar SIGABRT .

SIGINT no es compatible con ninguna aplicación Win32. Cuando ocurre una interrupción CTRL+C, los sistemas operativos Win32 generan un nuevo subproceso para manejar específicamente esa interrupción. Esto puede hacer que una aplicación de un solo subproceso, como una en UNIX, se convierta en multiproceso y provoque un comportamiento inesperado.


En un proyecto en el que trabajo, hacemos esto:

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

(En nuestro caso, queríamos colapsar fuertemente si esto ocurría fuera del depurador, generando un informe de fallas si era posible. Esa es una de las razones por las que usamos SIGABRT. Hacer esto de forma portátil en Windows, Mac y Linux tomó varios intentos. Terminamos con algunos #ifdefs, útil comentario aquí:http://hg.mozilla.org/mozilla-central/file/98fa9c0cff7a/js/src/jsutil.cpp#l66 .)


Linux
  1. Obtenga el código fuente para cualquier comando de Linux

  2. Ejemplo de punto de interrupción de GDB para C:establecer, ver, continuar y eliminar puntos de interrupción

  3. ¿Hay una GUI de C++ gdb para Linux?

  4. ¿Cómo configurar la afinidad de la CPU para un proceso de C o C++ en Linux?

  5. luchando con c ++ IDE en linux

3 herramientas de línea de comandos para fingir productividad

Comando de cambio de Linux para establecer la caducidad de la contraseña para el usuario

Más de 10 mejores IDE de Python para Linux

Configuración de Dropbox para un servidor en la nube de Linux

Cómo configurar un Killswitch de Linux para VPN

¿Cómo puedo perfilar el código C++ que se ejecuta en Linux?