GNU/Linux >> Belajar Linux >  >> Linux

Tetapkan breakpoint dalam kode C atau C++ secara terprogram untuk gdb di Linux

Dengan melihat di sini, saya menemukan cara berikut:

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

Ini sepertinya sentuhan hackish bagi saya. Dan menurut saya ini hanya berfungsi pada arsitektur x86.


Salah satu caranya adalah memberi sinyal interupsi:

#include <csignal>

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

Di C:

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

PEMBARUAN :Microsoft Docs mengatakan bahwa Windows tidak benar-benar mendukung SIGINT , jadi jika portabilitas menjadi perhatian, Anda mungkin lebih baik menggunakan SIGABRT .

SIGINT tidak didukung untuk aplikasi Win32 apa pun. Saat interupsi CTRL+C terjadi, sistem operasi Win32 membuat thread baru untuk secara khusus menangani interupsi tersebut. Hal ini dapat menyebabkan aplikasi single-thread, seperti yang ada di UNIX, menjadi multithread dan menyebabkan perilaku yang tidak diharapkan.


Dalam proyek yang saya kerjakan, kami melakukan ini:

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

(Dalam kasus kami, kami ingin mogok keras jika ini terjadi di luar debugger, menghasilkan laporan kerusakan jika memungkinkan. Itulah salah satu alasan kami menggunakan SIGABRT. Melakukan ini secara portabel di Windows, Mac, dan Linux memerlukan beberapa upaya. Kami berakhir dengan beberapa #ifdefs, berkomentar dengan sangat membantu di sini:http://hg.mozilla.org/mozilla-central/file/98fa9c0cff7a/js/src/jsutil.cpp#l66 .)


Linux
  1. Dapatkan Kode Sumber untuk Perintah Linux apa pun

  2. Apakah ada C++ gdb GUI untuk Linux?

  3. Bagaimana cara mengatur afinitas CPU untuk proses dari C atau C++ di Linux?

  1. berjuang dengan c ++ IDE di linux

  2. Cara mengatur ID proses di Linux untuk program tertentu

  3. Tetapkan tanggal dan waktu Sistem menggunakan C++ di Linux

  1. 5 tips untuk GNU Debugger

  2. Editor JavaScript Terbaik untuk Linux

  3. Linux:disiapkan untuk sysadmin jarak jauh