Установите точку останова в коде C или c++ программно для gdb на Linux
Как я могу установить точку останова в коде C или C++ программно, который будет работать для gdb на Linux?
то есть:
int main(int argc, char** argv)
{
/* set breakpoint here! */
int a = 3;
a++; /* In gdb> print a; expect result to be 3 */
return 0;
}
5 ответов:
одним из способов является сигнал прерывания:
#include <csignal> // Generate an interrupt std::raise(SIGINT);
В C:
#include <signal.h> raise(SIGINT);
обновление: MSDN состояния что Windows на самом деле не поддерживает
SIGINT
, Так что если мобильность является проблемой, вы, вероятно, лучше использоватьSIGABRT
.
в проекте, над которым я работаю, мы делаем это:
raise(SIGABRT); /* To continue from here in GDB: "signal 0". */
(в нашем случае мы хотели сильно врезаться, если это произошло за пределами отладчика, создавая отчет о сбое, если это возможно. Это одна из причин, по которой мы использовали SIGABRT. Чтобы сделать это переносимо через Windows, Mac и Linux потребовалось несколько попыток. Мы закончили с несколькими #ifdefs, услужливо прокомментировали здесь:http://hg.mozilla.org/mozilla-central/file/98fa9c0cff7a/js/src/jsutil.cpp#l66 .)
искать здесь, Я нашел следующий способ:
void main(int argc, char** argv) { asm("int "); int a = 3; a++; // In gdb> print a; expect result to be 3 }
Это кажется мне немного хакерским. И я думаю, что это работает только на архитектуре x86.