2012-02-23 1 views
1

매우 이상한 문제로 실행 중이며 멀리서 진단하는 것이 어려울 수도 있음을 알고 있습니다. 그러나 어떤 힌트라도 도움이 될 것입니다.valgrind 실행 중에 예외가 throw되지만 프로그램을 직접 호출 할 때 예외가 발생하지 않습니다.

내 프로그램을 실행 Valgrind의 실행, 예외가 발생 :

여기 내 문제가있어,이 말씀을 가졌어요. 그러나 쉘에서 직접 프로그램을 호출하면 정상적으로 실행됩니다.

valgrind의 vgdb를 사용하여이 예외가 발생하는 이유를 조사하려고했습니다. 그러나 이것은 예외가 발생한 후에 변수를 조사 할 수있게합니다. 왜냐하면 나는 valgrind에 (계속 사용하지 않고) 코드를 삽입 한 후 gdb를 시작하는 좋은 방법을 찾지 못했기 때문입니다.

예외가 발생하는 코드 세그먼트를 다시 만들려고했지만 동일한 변수 콘텐츠를 사용하여 예외를 트리거하지 않습니다.

나는 VMWare Workstation 8.0.1 가상 머신에서 우분투 11.10과 gcc 4.6.1, valgrind 3.7.0, gdb 7.3을 사용하고 있다고 덧붙여 야합니다.

도움을 주시면 감사하겠습니다.

+1

나는이 동작에 대한 이유를 발견했다고 생각합니다. 'vgdb'와 쉘에서는 가장 큰 double에 대한 한계가 다르다. 'vgdb'에서 1.2E56^9를 계산하려고 시도한 후에 나는'nan'을받는 반면, 프로그램이 쉘에서 호출되면 행복하게 계속됩니다 (올바른 결과를 찾습니다). – Achim

답변

0

그냥 몇 가지 아이디어 :

  1. 당신이 Valgrind의를 통해 프로그램을 호출 누락 된 명령 라인 파라미터 - 어쩌면 프로그램

  2. 다른 런타임에 이러한 매개 변수를 전달하는 특별한 방법이 valgrind에서 실행될 때 프로그램의 동작. valgrind는 일종의 디버거이므로 스레드가 다른 순서로 예약되고 코드 일부가 느리게 실행될 수 있습니다. 어쩌면 경쟁 조건과 같은 버그가 발생할 수 있습니다.

일부 코드는 여기에 게시 할 수 있습니까? 특히 예외가 제기 된 위치 주변에 게시 할 수 있습니까?

+0

1) 프로그램이 명령 행 매개 변수를 사용하지 않습니다. 2) 기본적으로 코드는 먼저 함수 평가를 구문 분석 한 다음 구성된 그래프에서 연산을 수행합니다. 그러나 코드의 실행 선형 및 valgrind 코드를 실행하는 순서를 변경하지 않는 것 같아요 – Achim

+0

좋아, valgrind 디버깅에 관한 stackoverflow 다른 스레드가 있습니다 : http://stackoverflow.com/questions/ 4945586/how-to-make-valgrind-debugger-step-through-a-program – svenfx

+1

vgdb를 시도하기 전에 스레드를 보았습니다. 하지만,'valgrind --vgdb = yes -vgdb-error = 0 main'을 시작한 다음 gdb 내부에'target remote | vgdb'. 해당 스레드로 전환하지만'0x040010e0 in ??()'. 나를 시작하는 유일한 방법은'계속'입니다. 지금까지, 나는 valgrind shell에서'Cmd + c'로 만 멈출 수 있지만 더 좋은 방법이 있어야합니다. – Achim