Tag: 调试

在OSX 10.9.5上的libc中的wordexp是否已泄漏?

在OSX wordexp上的wordexp是否已知泄漏内存? 如果没有,我的代码有什么问题? 在我自己的运行OSX 10.10.5的本地机器上,我通过Valgrind运行我的代码并且没有丢失的字节 。 我的Ubuntu Linux机器上也没有泄漏 。 但是,当我在使用OSX 10.9.5的 travis-ci帐户上启用valgrind检查时,我突然从wordexp内部分配的内存中泄漏,即使我使用wordfree释放它,因为手册页描述: ==8968== LEAK SUMMARY: ==8968== definitely lost: 1,024 bytes in 1 blocks ==8968== indirectly lost: 0 bytes in 0 blocks ==8968== possibly lost: 0 bytes in 0 blocks OSX 10.9.5 uname输出: Darwin 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 […]

如何调试PHP的内部c代码?

有没有人在这里尝试过或者有可能吗? 我已经使用PHP很多年了,但从来不知道底层的c脚本。 有没有办法进入呢?

在C中调试破坏的静态变量(gdb损坏?)

我已经完成了很多编程,但在C中并没有太多,我需要有关调试的建议。 我有一个静态变量(文件范围)在执行multithreading程序大约10-100秒后被破坏(在OS X 10.4上使用pthreads)。 我的代码看起来像这样: static float some_values[SIZE]; static int * addr; addr指向有效的内存地址一段时间,然后被一些值(有时为0,有时非零)破坏,从而在解除引用时导致段错误。 使用gdb我已经validation了addr正在人们期望的some_values之后立即在内存中进行some_values ,所以我的第一个猜测就是我使用了一个越界索引来写入some_values 。 但是,这是一个很小的文件,所以很容易检查这不是问题。 显而易见的调试技术是在变量addr上设置观察点。 但这样做似乎在gdb造成了不稳定和无法解释的行为。 观察点在第一次分配到addr时触发; 然后在我继续执行之后,我立即在另一个线程中得到一个无意义的段错误…据说是在程序的不同部分访问静态变量的地址时的段错误! 但是gdb允许我以交互方式读取和写入该内存地址。 程序收到信号EXC_BAD_ACCESS,无法访问内存。 原因:KERN_PROTECTION_FAILURE,地址:0x001d5bd0 在mainloop.c:39中接收(arg = 0x0)的0x0000678d 39 sample_buf_cleared ++; (gdb)p&sample_buf_cleared $ 17 =(int *)0x1d5bd0 (gdb)p sample_buf_cleared 18美元= 1 (gdb)设置sample_buf_cleared = 2 (GDB) gdb显然很困惑。 有谁知道为什么? 或者有没有人有任何建议调试此错误而不使用观察点?

C:分段错误:GDB:

我有一个函数shortestPath(),它是Dijkstra算法的修改实现,用于我正在为我的comp2类工作的棋盘游戏AI。 我已经浏览了网站并使用gdb和valgrind我确切知道了段错误发生的位置(几小时前就知道了),但无法弄清楚导致问题的是什么未定义的行为或逻辑错误。 发生问题的函数被调用大约10倍并按预期工作,直到它与GDB发生段错误:“错误读取变量:无法访问内存”和valgrind:“读取大小为8的无效” 通常情况下这就足够了,但我无法解决这个问题。 也欢迎任何一般建议和提示…谢谢! GDB: https : //gist.github.com/mckayryan/b8d1e9cdcc58dd1627ea Valgrind: https : //gist.github.com/mckayryan/8495963f6e62a51a734f 以下是发生段错误的function: static void processBuffer (GameView currentView, Link pQ, int *pQLen, LocationID *buffer, int bufferLen, Link prev, LocationID cur) { //printLinkIndex(“prev”, prev, NUM_MAP_LOCATIONS); // adds newly retrieved buffer Locations to queue adding link types appendLocationsToQueue(currentView, pQ, pQLen, buffer, bufferLen, cur); // calculates distance […]

GDB调试器问题 – 没有命名的源文件

出于某种原因,我无法让gdb在调试时识别项目中的文件。 我尝试过各种各样的东西,包括下载不同的版本等等。我做的最后一件事就是用Twilight Dragon Media的Bundle Package完全覆盖了所有的MingW。 有谁知道如何解决这个问题? 奇怪的是,当我第一次使用它时,它工作正常,然后它突然停止工作。 我正在使用Code :: Blocks,我检查了-g项目的调试版本。 我在Windows Vista上运行。

在VC ++中进入MACRO

我正在调试一个源代码,它有很多大的#define MACRO例程。 我很有兴趣进入它们,但我想,VC ++不允许步入function…所以, 我正在将它们转换为函数,但这对我来说变得很难 有没有办法进入MACRO例程? 特别是在VC ++中? PS:如果gcc编译器支持步入MACRO,我可以将整个代码移植到gcc中

调试Visual Studio 2010 DLL项目

我正在尝试从Visual Studio 2010调试C / C ++本机DLL项目。我正在尝试按照这些说明操作: http : //msdn.microsoft.com/en-us/library/c91k1xcf(v = VS.100 )的.aspx 我想使用内置的调试器,并能够像常规的.exe项目一样执行代码,检查结构等。 上面的页面上的说明描述了配置属性下的调试类别,我没看到。 http://img707.imageshack.us/img707/4402/lalasz.png 只需按F5进行调试就会出现以下错误: 无法启动程序’C:\ Users ……. Test.dll’ 我已经多次将调试器用于常规.exe项目,并且在这台计算机上运行正常。 我不确定我现在是否只是错过了一些非常明显的东西。 编辑:由于我从一开始就没有说清楚,我希望Visual Studio将我的DLL加载到存根过程中,然后让我从那里调试源代码,就像OllyDbg一样。 我的DLL不是包含要导出和调用的一堆函数的类型。 相反,它在DllMain中执行切换/大小写,并且在DLL_PROCESS_ATTACH上将生成一个新线程。 因此,我需要Visual Studio才能将我的DLL加载到存根可执行文件中,并允许我设置断点等。

Valgrind错误:UME失败,错误22

我正在玩Valgrind的工具开发,我收到以下错误: valgrind: mmap(0x8048000, 4096) failed in UME with error 22 (Invalid argument). valgrind: this can be caused by executables with very large text, data or bss segments. 但我的可执行文件只有简单的变量赋值。 我无法理解如何解决这个问题。 有什么建议?

为什么在调试时初始化函数中的字符串不像int那样工作

所以我今天尝试调试一些简单的C程序; 第一个是 int main(){ int a ,b ; return 0 ; } 在解编的时候给了我什么 push ebp mov ebp,esp sub esp,008h 因为我需要有8个字节来存储当前堆栈帧中的a和b,因为它们是局部变量! 但是当我尝试同样的字符串说 int main() { char greeting[12] = “Pwnit2Ownit”; return 0; } 在解编的时候给了我什么 push ebp mov ebp,esp sub esp,0DCh 0DCh是220,但由于字符串只有12个字节长不应该 sub esp,0DCh 是 sub esp,00ch 相反? 任何人都可以分享关于如何将字符串存储在内存中以及稍后通过汇编[优先指令]访问的链接,如果它的长度很大,那么存储在内存中的字符串问候因为我们无法将所有内容存储在堆栈中

调试C运行时

我想详细了解使用GDB在main()之前和之后发生的事情。 仅仅用-g重新编译glibc并链接到那个就足够了吗?