基于ARM嵌入式系统的glibc调试

基于ARM嵌入式系统的glibc调试,c,linux,glibc,C,Linux,Glibc,我在ARM系统上运行Xorg时遇到问题。我在Xorg上不时收到SEGV。经过一点调查(跨gdb)后,我发现堆栈是currupted的,因此我无法看到正确的过程调用堆栈。从内核日志中,我获取了LR寄存器的值,结果证明这个地址是ok的,属于glibc。因此,这意味着最后一个正确开票的过程在glibc中。目前我正在尝试调试glibc,但是这并不容易,因为printf()和put()不起作用 我修改了一个小的内核SEGV处理程序,现在我知道LR指向glibc中的char\u buffer\u add\u

我在ARM系统上运行Xorg时遇到问题。我在Xorg上不时收到SEGV。经过一点调查(跨gdb)后,我发现堆栈是currupted的,因此我无法看到正确的过程调用堆栈。从内核日志中,我获取了LR寄存器的值,结果证明这个地址是ok的,属于glibc。因此,这意味着最后一个正确开票的过程在glibc中。目前我正在尝试调试glibc,但是这并不容易,因为printf()和put()不起作用

我修改了一个小的内核SEGV处理程序,现在我知道LR指向glibc中的char\u buffer\u add\u slow()过程。此过程从_IO_vscanf()过程调用

是否有任何方法可以打印来自glibc的一些消息?
还有其他关于如何在ARM上调试glibc的想法吗

您的工具链中有跟踪选项吗?如果是这样,请在SEGV异常代码上设置一个断点,然后简单地读取跟踪以查看您是如何在那里结束的。不过,这听起来确实像是堆栈溢出,因此调用代码不一定是罪魁祸首。要解决堆栈溢出问题,您必须检查整个程序并查找不必要的堆栈使用。大型本地缓冲区和软件浮点是常见的原因。如何检查我的工具链是否有此跟踪选项?您可能知道。首先,CPU需要支持它,这意味着Cortex M3或更大。然后,在调试器中有一些称为指令跟踪或类似的选项。这是哪一个ARM?您使用的是哪一个调试器?它是Cortex A8。我正在使用GDB8.0.1。