Tag: 调试

OS X:在不降低流程的情况下生成核心转储?

我知道如何在进程崩溃时在OS X上生成核心转储,但我真正需要做的是附加到进程,生成核心转储,然后恢复该进程(不会杀死它)。 很久以前(也许是一年半前)我有C代码可以做到这一点…它使用OS X内核库连接到一个进程,读取它的所有线程状态和内存,并将其写入磁盘上的Mach-O文件。 这很好用(这正是我正在寻找的),但现在我似乎无法找到我的生活代码。 我似乎记得代码与OS X系统内部书籍有些相关,但这只是一个模糊的回忆。 有谁知道我正在谈论的代码,可以指出我吗? 如果不是,是否有人知道这样做的好方法最好是一些示例代码? 编辑:这是答案。 信息: http : //osxbook.com/book/bonus/chapter8/core/ 将为您完成的计划: http : //osxbook.com/book/bonus/chapter8/core/download/gcore-1.3.tar.gz

multithreading调试器

使用多个线程(pthreads)进行调试时,GDB存在严重问题。 在* nix上有没有其他适用于C / C ++的好的multithreading调试器?

gdb无法运行“文件格式无法识别”的ELF 64位程序

我正在尝试使用GDB进行调试(以找到恼人的段错误)。 当我跑: gdb ./filename 从命令行,我收到以下错误: This GDB was configured as “i686-pc-linux- gnu”…”/path/exec”: not in executable format: File format not recognized 当我执行: file /path/executable/ 我得到以下信息: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), not stripped 我正在使用GDB 6.1,可执行文件是使用gcc版本3.4.6编译的。 在使用gdb方面,我有点失水,但据我所知,它应该在这个实例中工作。 有什么想法会出错吗?

如何使用gdb来探索堆栈/堆?

有谁能请给我一个快速概述/指向我检查C程序的堆栈(和堆?)的方法的文档? 我认为这应该用GDB来完成,但是如果还有其他更直接的选择,那么这应该没问题。 谢谢。

Linux内核调试打印输出?

有没有更好的方法来调试Linux内核中的打印输出? 现在乱丢代码: printk(KERN_DBG “%s:%d – %s() “, __FILE__, __LINE__, __FUNCTION__ ); 哪个不是很干净。 应该有一种方式让整行成为#ifdef :ed以一种不错的方式。

“CRT检测到应用程序在堆缓冲区结束后写入内存”是什么意思?

我在使用此代码时遇到问题。 它在free(q-> izv)函数中断,我得到一个调试错误说: CRT detected that the application wrote to memory after end of heap buffer 我不知道这意味着什么,所以我会感激我得到的任何帮助。 typedef struct izvodjaci{ char *izv; int broj; struct izvodjaci *sled; }IZV; obrisi_i(IZV *p){ while (p){ IZV *q; q = p; p = p->sled; if (!strcmp(q->izv,”UNKNOWN”)) free(q->izv); free(q); } } 提前致谢

将libc回溯转换为源行号

我有一个MPI应用程序,它结合了C和Fortran源。 偶尔它会因为与内存相关的bug而崩溃,但是我很难找到这个bug(它是在别人的代码中的某个地方,目前我并不是很熟悉)。 我还没有能够用gdb捕获它,但有时会输出glibc backtrace,如下所示。 该错误可能接近“(main_main_ + 0x3bca)[0x804d5ce]”,(但有内存错误,我知道情况可能并非如此)。 我的问题是,有没有人知道如何将+ 0x3bca或0x804d5ce转换为代码的特定行? 关于追踪这个错误的任何其他建议也将受到赞赏。 我对gdb的基础知识非常熟悉。 *** glibc detected *** /home/…/src/finite_element: munmap_chunk(): invalid pointer: 0x09d83018 *** ======= Backtrace: ========= /lib/i386-linux-gnu/libc.so.6(+0x73e42)[0xb7409e42] /lib/i386-linux-gnu/libc.so.6(+0x74525)[0xb740a525] /home/…/src/finite_element(main_main_+0x3bca)[0x804d5ce] /home/…/src/finite_element[0x804e195] /home/…/src/finite_element(main+0x34)[0x804e1e8] /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb73af4d3] /home/davepc/finite-element/src/finite_element[0x8049971] ======= Memory map: ======== 08048000-08056000 r-xp 00000000 08:05 1346306 /home/…/src/finite_element 08056000-08057000 r–p 0000d000 08:05 1346306 /home/…/src/finite_element 08057000-08058000 rw-p 0000e000 08:05 1346306 /home/…/src/finite_element 09d1b000-09d8f000 rw-p […]

是否可以在Visual Studio中加载不匹配的符号?

我有一个Windows minidump(C代码)和一个相应的exe文件。 不幸的是,我没有完全匹配的.pdb文件,但我确实有.pdbs包含完全相同的代码,只是在不同的时间构建。 在Windbg中,我可以使用: .symopt+0x40 告诉它加载任何东西,甚至是不匹配的符号文件。 这在这个特定的实例中效果很好,我能够得到一个合适的调用堆栈。 我只是好奇Visual Studio是否有这样的function。 我们在这里使用几乎每个不同版本的VS,因此它可能属于哪个版本并不重要。谢谢。

GNU调试器的GUI

我非常兴奋使用GNU调试器和一个名为Insight的GUI,因为它为我节省了很多时间。 因此,我在其他新手那里发布这个问题/答案,就像我在他们的C代码中遇到问题,寻找可视方式来查看正在发生的事情。 我正在研究Linux Mint(Ubuntu)btw。

你可以#define在C中发表评论吗?

我正在尝试做一个调试系统,但它似乎无法工作。 我想要完成的是这样的事情: #ifndef DEBUG #define printd // #else #define printd printf #endif 有没有办法做到这一点? 我有很多调试消息,我不想这样做: if (DEBUG) printf(…) code if (DEBUG) printf(…) …