Segmentation Fault
|
2006-07-24, 01:18 PM,
ارسال : #1
|
|||
|
|||
Segmentation Fault
این خطای Segmentation Fault برای چیه ؟ در واقع ما بر روی یک سیستم لینوکس RHEL4 نصب کردیم بعد Calamav , LinuxConf, Squirrelmailرو نصب کردیم اول درست کار می کرد اما بعد از مدتی وقتی می خواستیم سرویس sendmail رو start کنیم این خطا رو می داد و بعضی از دستورات مثل date و mkdir و ... را که می زدیم Illegal Instruction می داد وقتی که Searck کردیم یک چنین چیزی دیدیم :
Signal 11, or officially know as "segmentation fault", means that the program accessed a memory location that was not assigned. حالا این مشکل رو چه طور می توان رفع کرد ؟؟؟ :roll: |
|||
2006-07-24, 08:37 PM,
ارسال : #2
|
|||
|
|||
همون memory access violation است . ممکنه مشکل از shared object ها باشد. با gdb برنامه رو run کنید و با back ببینید کجا segment اتفاق می افته .
|
|||
2006-07-24, 10:12 PM,
ارسال : #3
|
|||
|
|||
از نظر سختافزاری مثلا رم درسته؟
[ltr]Life *free = new Life(const long OpenSource);[/ltr] |
|||
2006-07-26, 07:29 PM,
ارسال : #4
|
|||
|
|||
نه الن جان مشکل از سخت افزار نیست . چون اگه می بود exception سخت افزاری اتفاق می افتاد و به احتمال زیاد SIGSEGV . trap یه interrupt که نشون دهنده invalid access است . یعنی اگه مثلا شما page size حافظه ات 4k است و ادرسی که CPU تولید می کند در قسمت offset مثلا 5000 باشه خوب از مرز تجاوز کرده و باید یقه برنامه رو گرفت . CPU به خونه حافظه دست نمی زنه در عوض این intrrupt رو ایجاد می کنه و باعث بیدار شدن سیستم عامل میشه . سیستم عامل میاد پروسس رو نگاه می کنه می بینه که بله می خواسته پاشو از گلیمش درازتر کنه و متعاقب چیزی که برای سیستم عامل تعریف شده با ان رفتار میکنه که در لینکس SIGKILL است یعنی پروسس رو می کشه و روی صفحه می نویسه Segmentation Fault
خوب بعد از این کلاس اموزشی همون طور که گفتم چاره درد شما استفاده از gdb است . یه سری breakpoint بذار ببین برنامه تا کجا اجرا میشه به راحتی می تونی اون NULL pointer رو پیدا کنی . اگه از shared object ها در runtime استفاده می کنی شرط می بندم که این so ها مشکل ایجاد کردن. |
|||
2006-07-26, 07:32 PM,
ارسال : #5
|
|||
|
|||
بالایی من بودم
|
|||
|