我在最新版本的OS X 10.8.2上遇到了以下問題,並帶有最新的Xcode 4.5。lldb/gdb有什麼問題,忽略OS X中的第一個sleep()語句?
採取以下簡單的代碼:
#include <iostream>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, const char * argv[])
{
pid_t pid = fork();
if (0 == pid)
{
std::cout << "Child process!\n";
exit(0);
}
else if (-1 == pid)
{
std::cout << "Error forking.\n";
}
else
{
std::cout << "In parent, created pid " << pid << ".\n";
sleep(100000); // Sleep a long time - GDB/LLDB ignores the first sleep statement
sleep(3); // Sleep 3 more seconds - GDB/LLDB doesn't ignore the second sleep statement
std::cout << "Done in parent!\n";
}
return 0;
}
編譯它使用clang++ foo.cpp -o foo
或g++ foo.cpp -o foo
並使用./foo
運行它,這需要很長的時間來運行,如所預期。
現在做lldb ./foo
或gdb ./foo
,然後run
並注意它在3秒內完成。無論何時使用調試器,第一個睡眠語句似乎都被忽略。
由於Xcode的默認運行項目時,粘貼上面的代碼到一個空白的Xcode項目和做產品展示 - >運行將有類似的結果使用LLDB。
我試過在gdb 7.2的Linux機器上進行同樣的實驗,問題是不是發生在那裏。
這是在舊版本的GDB的錯誤,蘋果應用程序(GDB 6.3.50-20050815(蘋果版GDB-1822)),或者是別的什麼?也許只是我的電腦搞砸了,如果它不發生在其他OS X用戶?
它絕對不只是你。我將這個逐字記錄剪切/粘貼到我的Xcode中,解僱了它,並得到了完全相同的結果。夥計,這是起飛。我一直盯着你的代碼尋找一個bug,但我只是沒有看到任何。 – WhozCraig
你是否將gdb設置爲跟隨孩子或父母,或者兩者都不是,或者兩者都不是,gdb會跟隨直接完成的父母。 –
除了我在問題中提到的內容外,我沒有做任何事情。父母不應該馬上結束,因爲它有兩個睡在那裏。 –