2016-12-04 24 views
0

제목에서 말한 것처럼, 나는 판고 또는 관련에 의한 것으로 보이는 이상한 충돌을 돌았습니다.매우 랜덤 한 판고 크래시

내 프로그램이 제대로 작동하고 이상한 시각적 결함이나 다른 종류의 오류는 발생하지 않지만 이러한 종류의 오류는 대개 충돌로 이어집니다. 때로는 그냥 예외를 throw하고 계속하지만, 그 예외의 약 10 %가 충돌을 일으키지 않을 것임을 언급하지 않고 종료됩니다.

가장 일반적인 하나 : 여기

다른 시도의 일부 로그입니다

(App:23224): Pango-CRITICAL **: pango_layout_set_width: assertion 'layout != NULL' failed 

(App:23224): Pango-CRITICAL **: pango_layout_get_width: assertion 'layout != NULL' failed 

(App:23224): Pango-CRITICAL **: pango_layout_get_extents: assertion 'layout != NULL' failed 

(App:23224): Pango-CRITICAL **: pango_layout_is_wrapped: assertion 'layout != NULL' failed 

(App:23224): Pango-CRITICAL **: pango_layout_is_ellipsized: assertion 'layout != NULL' failed 
./Def:822: Warning: g_object_ref: assertion 'G_IS_OBJECT (object)' failed 
    Gtk.main() 

(App:23224): Pango-CRITICAL **: pango_layout_get_extents: assertion 'layout != NULL' failed 

더 - 또는 - 덜 일반적인 하나 ...

(App:22385): Pango-CRITICAL **: pango_layout_is_wrapped: assertion 'layout != NULL' failed 

(App:22385): Pango-CRITICAL **: pango_layout_is_ellipsized: assertion 'layout != NULL' failed 
./Def:820: Warning: g_object_ref: assertion 'G_IS_OBJECT (object)' failed 
    Gtk.main() 

(App:22385): Pango-CRITICAL **: pango_layout_get_extents: assertion 'layout != NULL' failed 

그리고 가장 이상한 것 :

Pango:ERROR:/build/buildd/pango1.0-1.36.3/./pango/pango-layout.c:3916:pango_layout_check_lines: assertion failed: (!layout->log_attrs) 

마지막 하나만 보았습니다. 나머지 오류는 흔한 종류입니다.

어떤 아이디어

이 무슨 일 수 ... 내 응용 프로그램은 여전히 ​​기록적인 시간에 살아있을 때

는 아이러니 컬하게도, 마지막 등장하고,이 오류는 심지어 "일반적인"오류없이, 갑자기 종료?

앞서 말했듯이 위의 오류 중 하나가 종료 될 때까지 내 앱이 작동합니다.

추가 정보 :

  1. 내 응용 프로그램이 멀티 스레드이지만,이 오류가 ... 그렇지 않으면 뭔가 너무 불평한다 스레드 관련이있을 것 같지 않습니다!
+1

일부 코드가 표시되어야합니다.'G_DEBUG = fatal-warnings'을 사용하면 디버깅을 돕기 위해 경고가 나타날 때마다 gdb가 중단됩니다. GTK +를 여러 스레드와 함께 사용하려는 시도가이 문제를 일으키는 것 같아요. – andlabs

+0

필자는 andlabs에 동의해야하는데, 이것은 멀티 스레딩 문제에 강하게 냄새가 난다. – jku

+0

나는 똑같은 생각을 했었지만 진행 상황을 지속적으로 모니터링하고 동시에 진행 상황을 업데이트 할 생각이 전혀 없었습니다! 한편, gdb가 다른 것을 발견하면 ... – PythonNoob

답변

1

음은 꽤 오랫동안 연구 한 후에, 나는 This, ThisThis을 발견했다.

모두 유용했습니다. 첫 번째 것은 동일한 주제에 대한 다른 사람의 질문에 대한 링크이고, 두 번째 것은 devs에 대한 공식 그놈 웹 사이트에 대한 링크입니다. Gdk.threads_add_idle에 대한 정보를 찾았습니까? 세 번째 것은 버그 링크입니다. 앞서 언급 한 Gdk 함수에서보고합니다. 왜냐하면 Python에서는 3 개의 인수를 요구하기 때문입니다. C에서는 2를 요구할 뿐이므로 3을 요구하는 이유를 명확히합니다.

발견 한 후에는 고칠 수 없었습니다 Gdk.threads_add_idle.

난 그냥 기능에 gtk와 내 모든 전화를 이동하고, 두 번째 스레드에서, priorityGLib.PRIORITY_DEFAULT_IDLE해야하며 function는은 Gtk에 대한 모든 호출을 포함하는 기능을해야합니다 Gdk.threads_add_idle(priority, function, data)와 모든 통화를 변경했다.

data 선택적 인수입니다. 여기에는 전달하고자하는 추가 데이터가 모두 포함되어야합니다. function