簡體   English   中英

程序退出狀態為255 C ++ Main with Ada

[英]Program Exit with Status 255 C++ Main with Ada

我有一組單線程C ++主管,它們在Ada中開發了大量代碼。 這是在Atego(Rational)Apex Duo中構建的,目標是32位RHEL 6.3 Linux。 exec是我開發的Class系統,包括套接字,狀態機和作為exec核心的計時器類。 類系統用於在6個不同的系統上構建和執行14個獨立的執行程序,這些系統通過套接字進行通信。 它們都使用相同的Class系統,並在啟動時根據INI文件進行自我配置。

執行程序使用Linux系統時鍾通過gettimeofday以50或60 Hz的頻率幀

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

和一個簡單的非busywait算法來產生所需的調度程序。

我現在面臨的問題是這些高管隨機失敗(看似)。 失敗似乎是他們只是停止框架。 我已經在“try {} catch(...){}”中封裝了所有運行時C ++過程,並且沒有捕獲任何內容。 同樣,Ada例程受到不受命中的異常處理程序的保護。

在失敗之前,執行官經常會快樂地跑30分鍾到超過一個小時。 沒有明顯的內存蠕變跡象(使用系統監視器)。 我已將Atego Rational Graphical Debugger附加到已經運行的高管,但無濟於事。 當一個最終失敗時,調用堆棧中沒有任何內容,並且調試器日志中的唯一指示是應用程序具有“退出狀態255”。

我擔心系統中的某個(Linux)系統例程或驅動程序正在調用Exit。 很明顯SOMETHING正在退出!

任何人都知道我怎么能進一步證明這個問題?

這可能不是一個答案,但它的評論范圍太寬......

因此,故障在6台機器中的每台機器上都有一個可執行文件; 負責通過網絡共享數據的可執行文件; 對? 並且“本地”可執行文件似乎是可靠的......或者6個有缺陷的可執行文件是否如此干凈地映射到6個系統上?

故障是否與網絡負載有關,例如延遲超過您的(電視或交流電源)幀速率? 通過堵塞網絡使其更快失敗可以簡化測試......

當Linux網絡時鍾向后運行時,我的系統出現故障...故障發生在C ++組件中,因此當dt變為負數時沒有簡單的約束錯誤,但是在4e9微秒的超時“超時”遠離失敗線。 。

聽起來好像Ada的任務設施和分布式系統附件對於這個應用來說是理想的,但在這個階段,這種設計變化水平可能並不合適。

也許它可以給你一些進一步的方向:

如果你試圖從main返回double,可能會發生這種情況。 看到:

double main ()
{
    return 0.0;
}
$ cc double.c
double.c: In function 'main':
double.c:2: warning: return type of 'main' is not 'int'
$ ./a.out
$ echo $?
255
$

如果在POSIX OS下嘗試從main()返回double,則調用進程幾乎總是會看到255。

現在看來,Ada RTS對C ++主要版本並不“滿意”。 當然不是所有人都得到了答案......但是固定工作。 我們從C ++主電源改為Ada電源......這是一個簡單的改變...... Ada現在導入一堆C ++而不是相反。 它並不像C ++主要原始那樣純凈......但我覺得功能性很強。

沒有答案的問題是為什么它首先死了?...為什么只有一些高管......而其他人繼續“永遠”奔跑? 我們懷疑它最終會與超出界限的事情有關,並且應用程序在調用Ada中的例程時必須做的越多......它死得越快。 這讓我們相信Stack已經被破壞了...但為什么只有C ++主?

無論如何,它適用於Ada主電源,工作是最重要的要求......所以我們稱之為“固定”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM