我想调试运行多个TCP服务器线程的C程序。我无法设置复杂的调试工具,因为我必须在嵌入式Linux(忙箱)中进行调试。我希望它原生支持gdb。
所以我开始使用gdb。一旦我键入运行,服务器似乎在后台运行,但gdb返回提示和“程序接收信号SIG64(实时事件64)”消息(与猜测相关的pthread)。我知道它必须与主要分叉到几个线程。但我不知道如何调试这个。任何起点都会非常有用。
另外,是否还有其他“跟踪”类似调试器,我可以使用的占用空间小?
请帮忙
答案 0 :(得分:6)
通常,使用调试器调试多线程应用程序很困难。最好的方法是尝试将错误隔离到单线程的情况,或者在可疑位置使用调试打印,直到发现错误。
这对您的具体问题毫无帮助,但这是我在使用多线程应用程序时学到的最佳建议,尤其是嵌入式应用程序。
答案 1 :(得分:2)
在这种情况下,我通常会这样做:
创建一个线程明智的日志文件,并在该日志文件中重定向所有stdout
和stderr
...
也许这会对你有所帮助:In multi thread application how can i redirect stderr & stdout in separate file as per thread?
跟踪所有线程之间的全局变量。不正确地使用全局变量往往会导致问题。
如果您使用的是互斥锁,请检查它是否会产生死锁。在条件和&信号量设计总是试图跟踪纸上的所有线程。
答案 2 :(得分:1)
我建议您使用像valgrind这样的内存访问检查程序。就我而言,许多错误都是由非法内存处理引起的。很难找到多线程程序的bug,所以使用内存泄漏检查程序是找出错误原因的更好方法。
答案 3 :(得分:0)
一些棘手的想法..
不要忘记必须在睡眠时间结束前完成附着。
如上所述,单线程测试或使用文本记录工具是不错的选择。