Tag: gdb

在OpenMP中使用GDB

使用GDB我似乎无法在OpenMP线程中打印共享变量的值。 例如,使用以下程序: #include #include #include int main(int argc, char *argv[]) { int priv, tid, pub = 100; #pragma omp parallel private(priv, tid) num_threads(2) { tid = omp_get_thread_num(); priv = tid * 10; #pragma omp sections { #pragma omp section { printf(“SECTION 0: tid=%d, priv=%d, pub=%d\n”, tid, priv, pub); } #pragma omp section { printf(“SECTION 1: […]

使用getopt和gdb

刚刚将getopt合并到我的main()函数中 getopt为每个调用设置全局变量optarg 使用gdb步执行main() ,在getopt()调用optarg始终为NULL (例如(gdb) p optarg )而printf(“%s\n”, optarg)按预期输出cmd行arg 这是怎么回事? 为什么这两个不一样? 这是gdb的问题,以及它如何检查全局或其他事情?

推荐的方法来跟踪C程序中数组越界访问/写入

考虑在C中编写一些不那么明显的算法的实现。例如,让我们在KN King的“C编程:现代方法,第2版”一书中找到它的递归快速排序,它可以从这里获得 。 最有趣的部分包括以下两个定义: void quicksort(int a[], int low, int high) { int middle; if (low >= high) return; middle = split(a, low, high); quicksort(a, low, middle – 1); quicksort(a, middle + 1, high); } int split(int a[], int low, int high) { int part_element = a[low]; for (;;) { while (low < high && […]

即使使用-g选项,GCC也不会生成行号信息

我从源代码构建并安装了GCC 4.8.1: $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ./configure –disable-multilib Thread model: posix gcc version 4.8.1 (GCC) 我写了一个简单无用的程序: $ cat hw.c #include void foo() { int a; scanf(“%d”, &a); /* So I can press ctrl+c here. */ printf(“Hello world!\n”); } int main() { foo(); } 现在我编译一下: $ gcc -g […]

导致Gtk中断断言

我必须调试一个严重依赖于Gtk的程序。 问题在于,由于某些原因,在使用GtkWindow对象时已经开始出现许多运行时警告。 问题是,即使Gtk抱怨严重错误,它也不会中止这些错误。 我没有代码库的更改历史记录,所以我唯一的选择似乎是涉及所有似乎可疑的gtk调用并查看问题所在。 但是,如果我可以以某种方式导致Gtk中止此错误,我可以使用gdb运行它并尝试获取回溯并找到错误的确切位置。 知道如何做到这一点? GLib-GObject-WARNING **: invalid uninstantiatable type `’ in cast to `GObject’ GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)’ failed GLib-GObject-WARNING **: invalid uninstantiatable type `’ in cast to `GObject’ GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)’ failed GLib-GObject-WARNING **: invalid uninstantiatable type `’ in cast to `GObject’ GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT […]

gvim和gdb for C?

在emacs中有一种方便的方法来启动gdb(g调试器)的gdb和gui选项。 gvim中有类似的选项吗?

malloc()如何导致SIGSEGV?

我的程序中有一个奇怪的错误,在我看来malloc()正在引起一个SIGSEGV,据我所知,这没有任何意义。 我正在使用一个名为simclist的库来创建动态列表。 这是一个稍后引用的结构: typedef struct { int msgid; int status; void* udata; list_t queue; } msg_t; 这是代码: msg_t* msg = (msg_t*) malloc( sizeof( msg_t ) ); msg->msgid = msgid; msg->status = MSG_STAT_NEW; msg->udata = udata; list_init( &msg->queue ); list_init是程序失败的地方,这里是list_init的代码: /* list initialization */ int list_init(list_t *restrict l) { if (l == NULL) return -1; srandom((unsigned […]

C / C ++需要一种聪明的方法来跟踪函数调用

我正在寻找一种聪明的方法来跟踪函数调用和返回。 我知道我可以使用调试器,但我希望有一种方法可以让它在调用函数时向终端输出一些东西而不必逐步执行代码。 我想我可以使用预处理器,但我不确定最好的方法是什么。 或者有没有办法使用gdb打印出有用的信息,而无需单步执行代码。

GDB问题:漂亮打印2Darrays?

我有一个2d数组矩阵[10] [10],我想在调试时检查。 我知道我可以在GDB中使用 p *matrix@10 但它在一行中输出,使其难以阅读。 有没有办法让这个输出以任何方式格式化,让我们说作为一个矩阵?

pthread_t到gdb线程id

有没有人知道从pthread_t到GDB用信息线程显示的方法? 所以我有: (gdb) info threads 37 Thread 22887 0xb7704422 in __kernel_vsyscall () 36 Thread 22926 0xb7704422 in __kernel_vsyscall () 35 Thread 22925 0xb7704422 in __kernel_vsyscall () 34 Thread 22924 0xb7704422 in __kernel_vsyscall () 33 Thread 22922 0xb7704422 in __kernel_vsyscall () 32 Thread 22921 0xb7704422 in __kernel_vsyscall () (gdb) p m_messageQueue->m_creationThread $3 = 2694822768 (gdb) p/x […]