我正在使用 c 的自定義單元測驗系統,它將每個測驗分叉到一個新行程中,以便如果一個測驗崩潰,其他測驗仍然可以不間斷地執行。現在我正在嘗試使用它來測驗使用 Allegro 的代碼。當我運行al_init()時main(如下所示),我的測驗程式在第一次測驗后終止并顯示錯誤訊息:
X connection to :1 broken (explicit kill or server shutdown).
X connection to :1 broken (explicit kill or server shutdown).
make: *** [Makefile:39: tests/results/collision.result] Error 1
導致問題的錯誤代碼:
void MakeCollisionCircleInWorldTest()
{
Testing_Unimplemented();
}
/*
* other unimplemented tests here, cropped for brevity
*/
int main(int argc, char **argv)
{
al_init();
Testing_Init(argc, argv);
TESTING_RUN(MakeCollisionCircleInWorldTest);
TESTING_RUN(DuplicateCollisionCircleTest);
TESTING_RUN(AddCollisionCircleTest);
TESTING_RUN(RemoveCollisionCircleTest);
TESTING_RUN(MoveTest);
TESTING_RUN(CheckCollisionsTest);
return 0;
}
注意:它TESTING_RUN執行上述分叉。我認為這與崩潰有關(也許在第一個孩子終止后連接被終止?),但我不確定具體如何解決,也不確定如何解決。
當我al_init()在每個測驗中分別呼叫 to時(如下所示),沒有過早終止或錯誤訊息,但它似乎有點慢(不是慢得無法忍受,但有一個明顯的暫停,它不應該真正用于測驗那只是立即失敗,因為它們未實作)。此外,為每個單獨的測驗重新啟動 Allegro 似乎有點痛苦。
void MakeCollisionCircleInWorldTest()
{
al_init();
Testing_Unimplemented();
}
/*
* other unimplemented tests here, cropped for brevity
*/
int main(int argc, char **argv)
{
Testing_Init(argc, argv);
TESTING_RUN(MakeCollisionCircleInWorldTest);
TESTING_RUN(DuplicateCollisionCircleTest);
TESTING_RUN(AddCollisionCircleTest);
TESTING_RUN(RemoveCollisionCircleTest);
TESTING_RUN(MoveTest);
TESTING_RUN(CheckCollisionsTest);
return 0;
}
是什么導致了崩潰?有什么方法可以在main不破壞我的測驗的情況下初始化 Allegro ?
uj5u.com熱心網友回復:
此問題是由al_init()設定al_uninstall_system為atexit函式引起的。結果是孩子退出時執行了系統卸載。這可以通過呼叫al_install_system(ALLEGRO_VERSION_INT, NULL)而不是al_init(),然后al_uninstall_system()在父行程完成時手動呼叫來防止。還有其他解決方案,但這就是我現在所采用的,因為我的單元測驗程式只有一個出口點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/401311.html
上一篇:如何撰寫此測驗以實作完整覆寫?
