Autor Wątek: Dziwny błąd  (Przeczytany 2911 razy)

Offline BEZIMENNY45645

  • Użytkownik

# Październik 14, 2012, 23:00:54
Witam. Od jakiegoś czasu w moich mini programach pojawia się dziwny błąd. Wywala okienko jak przy Access Violation i kiedy dam break to pokazuje mi się tekst:
Cytuj
No symbols are loaded for any call stack frame. the source code cannot be displayed
I tam mogę zdeassemblować tylko. Nie wiem co robić w takiej sytuacji. Czytałem na internecie,ale są tam tylko odpowiedzi po angielsku a mój angielski zbyt dobry nie jest. Czy ktoś ma pomysł co z tym zrobić? Mam Visual Studio C++ Express Edition 2010. Te mini programy mają zlinkowaną napisaną przeze mnie bibliotekę statyczną.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Avaj

  • Użytkownik

# Październik 14, 2012, 23:32:44
może kompilator w wersji 32bit a linkujesz liby 64bit albo na odwrót?

Offline Paweł

  • Użytkownik

# Październik 14, 2012, 23:45:28
1)Do wersji debug linkuj bibliotekę równiez w wersji debug, wtedy nie wytnie ci symboli i prawdopodobnie będziesz mógł podejrzeć w którym miejscu naruszasz pamięć.
2)Zmień nazwę tematu.

Offline Xirdus

  • Redaktor

# Październik 15, 2012, 00:11:05
Według mnie to musisz podać debuggerowi aplikacji ścieżkę do źródeł twojej biblioteki, bo tam leży błąd. Nie pytaj mnie jak to zrobić - nie wiem. Ale wiem, że to pomoże.

I jakbyś poszedł trochę w dół call stacka, to zobaczyłbyś, która funkcja w kodzie aplikacji jest winna.

Offline Paweł

  • Użytkownik

# Październik 15, 2012, 00:17:30
Albo aktywuj projekt z biblioteką, daj debug, później wskaż host application i gotowe.

Offline BEZIMENNY45645

  • Użytkownik

# Październik 15, 2012, 19:27:47
Libów x64 nie linkuje do 32 bitowego, to pojawia się jak ustawię materiał na normal mapping,nie wiem, może coś w ładowaniu shaderów do pamięci mam źle, bo tam tak jakby wywala mnie debugger.

EDIT:
Sprawdziłem teraz,i sam odpalony exe bez visuala uruchamia się,co prawda efekt graficzny jest zły,ale sam program się uruchamia. I tutaj właśnie już nie wiem czy to wina debuggera i coś jest źle ustawiona czy kodu samego.
« Ostatnia zmiana: Październik 15, 2012, 22:18:30 wysłana przez BEZIMENNY45645 »

Offline Xirdus

  • Redaktor

  • +2
# Październik 15, 2012, 23:05:17
Masz błąd w programie. Debugger go wykrywa i stopuje program. Bez debuggera program nie stopuje, bo błąd nie jest krytyczny, co nie znaczy że go nie ma. Debugger nie potrafi wskazać miejsca w kodzie, ponieważ błąd objawia się w środku biblioteki, a mając otwarty projekt aplikacji nie masz dostępu do źródeł biblioteki (znaczy się masz, ale debugger o tym nie wie). Masz za to dostęp do kodu aplikacji. Cofnij call stack o parę pozycji i zobacz, która funkcja biblioteczna jest wywoływana z kodu programu jako ostatnia. Może przekazujesz złe parametry? Jak się upewnisz, że jest dobrze, to zdebuguj bibliotekę, robiąc tak jak powiedział Paweł.

Offline BEZIMENNY45645

  • Użytkownik

# Październik 16, 2012, 20:08:30
Debuguje tą bibliotekę,już coś znalazłem,ale muszę to jeszcze sprawdzić,tylko,że teraz zauważyłem tak,jakby ten błąd występował losowo,tzn. nawet jak nie zmienię nic w programie,to błąd przy jednym debugowaniu jest,a przy drugim go nie ma.

Offline BEZIMENNY45645

  • Użytkownik

# Październik 19, 2012, 21:10:56
Dobra problem rozwiązany,źle liczyłem wielkość stringu jaki podawałem do funkcji D3DXCompileFromMemory, a teraz jeśli ktoś byłby tak miły to mógłby mi powiedzieć czy kod tego shadera jest poprawny,tzn. ma on renderować normal mapping. Dam tutaj tylko kod główny shadera. Nie chce zaśmiecać forum i tworzyć nowego wątku,chodzi mi tylko o to czy shader jest poprawny,a jeśli nie to dlaczego.

VertexShader
OUTPUT VS(INPUT input)
{
float4 t = float4(mul(input.tangent.xyz,(float3x3)world),0);
float4 n = float4(mul(input.normal.xyz,(float3x3)world),0);
float4 b = float4(cross(t.xyz,n.xyz),0);

t = normalize(t);
b = normalize(b);
n = normalize(n);
float3x3 tbn = transpose(float3x3(t.xyz,b.xyz,n.xyz));

OUTPUT output;
output.position = mul(input.position,world);
output.position = mul(output.position,view);
output.position = mul(output.position,projection);
output.texcoord = input.texcoord;
output.normal = n;
output.texcoord2 = mul(input.position,world);
output.texcoord3 = eyePosition - output.texcoord2;
output.texcoord3 = float4(mul(output.texcoord3.xyz,(float3x3)tbn),0);
if(lightColor.w == 0.25f)
{
output.texcoord4 = mul(lightDir,world);
}
else if(lightColor.w == 0.5f)
{
output.texcoord4 = lightPosition - output.texcoord2;
output.texcoord4 = float4(mul(output.texcoord4.xyz,(float3x3)tbn),0);
}
output.texcoord5 = t;
output.texcoord6 = b;
output.texcoord7 = float4(0.0f,0.0f,0.0f,0.0f);
output.texcoord8 = float4(0.0f,0.0f,0.0f,0.0f);
return output;
}
end

PixelShader
float4 PS(INPUT input) : SV_Target
{
float4 tex = diffuseMap.Sample(samLinear,input.texcoord);
float4 bumpNormal = normalMap.Sample(samLinear,input.texcoord);
float3x3 tbn = float3x3(input.texcoord5.xyz,input.texcoord6.xyz,input.normal.xyz);
bumpNormal = (bumpNormal * 2.0f) - 1.0f;
bumpNormal = float4(mul(bumpNormal.xyz,(float3x3)tbn),0);
bumpNormal = normalize(bumpNormal);
float4 L;
if(lightColor.w == 0.25f)
{
L = input.texcoord4;
}
else if(lightColor.w == 0.5f)
{
L = input.texcoord4;
}
float4 light = calculateLightAndAttenuation(lightColor.w,bumpNormal,L,normalize(input.texcoord3),lightAttenuation,shinessis);
return ((tex * light.x) + (light.y * float4(1.0f,1.0f,1.0f,1.0f))) * float4(lightColor.xyz,1.0f) * light.z;
}
end