2010-06-14 6 views
1

솔루션을 얻으려면 약간의 "밝음"이 필요합니다. 아마이 문제를 일으키는 많은 것들이 있을지 모르지만, 아마도 누군가 나를 도울 수 있습니다.응용 프로그램 오류 : 주소 오류 0x00012afb (전문가)

시나리오 : 24/7 PostgreSQL 데이터베이스 및 기타 서버 응용 프로그램 (데이터베이스 작업 등)을 실행하는 Windows 서버. 다양한 하드웨어 및 Windows 버전 (XP SP3/WinServer 등 ... 모든 NT 기반)을 사용하는 서버 시나리오가 다릅니다 (~ 30 개). 모든 응용 프로그램은 Delphi7로 작성되었으며 DLL에 링크되었습니다 (D7에서도).

며칠 (때로는 1 주일, 때로는 2 달), Windows가 시작 메뉴를 열지 않는 것처럼 이상한 행동을하기 시작하고 일부 단추가 대화 상자에 없습니다. 그리고 곧 일부 응용 프로그램 할 열려 있지, 이벤트 표시기에 이벤트를 발생 :

평균에서
Faulting application x, version y, faulting module kernel32.dll, version 5.1.2600.5781, fault address 0x00012afb 

다른 응용 프로그램 등 메모장, iexplore를, 같은 개방형 잘 ...하지만 내 응용 프로그램의 일부는 함께하지 않는, 동안 이벤트 로그. 그러나 우리가 시스템을 다시 시작하지 않으면 cmd.exe조차도 eventlog에서 같은 오류로 열린 (그리고 다른 모든 응용 프로그램)을 중지합니다.

'무엇이'문제를 일으킬 수 있는지 발견했지만 문제가 없습니다. 그래서, 어떤 충고라도 환영받을 것입니다.

미리 감사드립니다.

+0

이것은 어떤 식 으로든 도움이 될 것이지만 0x00012afb는 kerner32.dll의 진입 점 666 (RaiseException 함수)에있는 것 같습니다. – Humberto

+0

일부 프로그래머는 참조로 예외를 포착하지 못하는 나쁜 습관을 가지고 있습니다. 스레드가 메모리가 부족하면 예외 자체가 진행될 수없고 C++ 런타임을 복구 할 수 없으므로 예외로 인해 전체 프로세스의 exitus가 발생할 수 있습니다. 나쁜 예외 처리에 대한 힌트 일 수도 있습니다. http://www.goingware.com/tips/parameters/exceptions.html – jdehaan

+0

이전에 언급 한 내용을 추가하면이 오류 로그가 불충분합니다. 오류가 발생했을 때 전체 스택이 로그에 포함되어 있으면 더 좋습니다. 그대로, 이벤트 그냥 말한다 : "응용 프로그램 x, 버전 y 던졌다 오류". – Humberto

답변

2

리소스 핸들 (윈도우 핸들)이 부족하다고 생각합니다. Sysinternals Process Explorer (더 나은 작업 관리자)의 시스템 속성을 살펴봄으로써이를 확인할 수 있습니다. 나는 심지어 기본 작업 관리자가 핸들 수를 표시하는 것을 도울 수 있다고 생각한다. 그런 다음 어떤 응용 프로그램이 문제를 일으키는 지 확인할 수 있습니다.

응용 프로그램이 누출되었다고 판단한 경우 Rational purify 나 Boundschecker를 사용하여 문제를 자세히 조사 할 수 있습니다. 이러한 도구에 대한 비용이없는 경우 일부 기능을 비활성화하고 핸들 수가 계속 증가하는지 확인하여 문제를 수동으로 조금 줄여야합니다 ...

발생하는 문제인지 잘 모름 아마 그것은 완전히 무관하다. 그러나 확인하기 쉽습니다. 트랙은 일부 애플리케이션이 다른 애플리케이션과 관련된 문제를 겪을 때 일부 글로벌 리소스를 훔치는 것입니다. 메모장과 같은 응용 프로그램은 많은 자원을 사용하지 않으므로 잘 작동하는 것처럼 보입니다. 무거운 응용 프로그램은 문제를 일으킬 가능성이 큽니다.

희망이 있습니다.