PDA

Visualizza la versione completa : [c++]lib statiche e debug


giuseppe500
03-01-2014, 18:45
ciao.
Vorrei fare il debug di progetto in vs 2012 che utilizza due librerie statiche che ho creato a parte.
Nella stessa soluzione ho quindi tre progetti:
le .lib in due progetti e il progetto da debuggare che include i .h delle .lib.
le .lib sono incluse nel progetto di cui voglio fare il debug.
non vedo generati i .pdb servono?
IL problema che se faccio questo non mi visualizza il contenuto delle variabili quando passo col debug sul codice.
grazie.

giuseppe500
04-01-2014, 14:07
l debug va ma si comporta in un modo strano :
uso le qt e ho queste due righe:



m_pRenderer = new CRenderer(0,960,540,0);
m_pRenderer->set(5);


quando col debug vado all interno del m_pRenderer con m_pRenderer->set(5); la variabile



void CRenderer::set(int n)
{
cout << n;
}

n ha un valore del tipo 354523(casuale?) nelle watch o se ci vado sopra,mentre ho provato col cout ed effettivamente viene 5 stampato nella console.
cosa puo essere che non mi fa vedere la variabile col valore corretto?
uso delle static lib con il code generation a

Multi-threaded Debug (/MTd)

sia nelle librerie che nell'applicazione,

forse un problema di vs 2012 o delle qt?
includo le lib delle qt , ma non so che tipo di generazione di codice hanno , probabilmente dato che sono dll usano

Multi-threaded Debug DLL (/MDd)

forse li il casino?

grazie.

oregon
04-01-2014, 14:21
Ma il breakpoint sulla linea della cout ?

giuseppe500
04-01-2014, 15:10
Ma il breakpoint sulla linea della cout ?

si Oregon

oregon
04-01-2014, 15:31
Ho provato e in questo caso n vale 5

Mostra l'equivalente assembly del codice corrispondente alla parte del metodo set a partire dalla cout

giuseppe500
04-01-2014, 16:18
Ho provato e in questo caso n vale 5

Mostra l'equivalente assembly del codice corrispondente alla parte del metodo set a partire dalla cout

scusa la mia ignoranza Oregon , uso vs 2012 ma non so come fare a postarti l'assembly, dove si vede? me lo puoi spiegare?
te ne sarei grato.
ciao.

giuseppe500
06-01-2014, 18:51
scusa la mia ignoranza Oregon , uso vs 2012 ma non so come fare a postarti l'assembly, dove si vede? me lo puoi spiegare?
te ne sarei grato.
ciao.
questo puo essere utile?


--- No source file -------------------------------------------------------------
000000013FD992E6 int 3
000000013FD992E7 int 3
000000013FD992E8 int 3
000000013FD992E9 int 3
000000013FD992EA int 3
000000013FD992EB int 3
000000013FD992EC int 3
000000013FD992ED int 3
000000013FD992EE int 3
000000013FD992EF int 3
--- c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ----
return (_STD addressof(_Val));
000000013FD992F0 mov rax,rcx
}
000000013FD992F3 ret
--- No source file -------------------------------------------------------------
000000013FD992F4 int 3
000000013FD992F5 int 3
000000013FD992F6 int 3
000000013FD992F7 int 3
000000013FD992F8 int 3
000000013FD992F9 int 3
000000013FD992FA int 3
000000013FD992FB int 3
000000013FD992FC int 3
000000013FD992FD int 3
000000013FD992FE int 3
000000013FD992FF int 3
--- c:\open4\open4\graphics2\renderer.cpp --------------------------------------

}
000000013FD99300 ret 0
--- No source file -------------------------------------------------------------
000000013FD99303 int 3
000000013FD99304 int 3
000000013FD99305 int 3
000000013FD99306 int 3
000000013FD99307 int 3
000000013FD99308 int 3
000000013FD99309 int 3
000000013FD9930A int 3
000000013FD9930B int 3
000000013FD9930C int 3
000000013FD9930D int 3
000000013FD9930E int 3
000000013FD9930F int 3
--- c:\open4\open4\graphics2\renderer.cpp --------------------------------------
cout << n;
000000013FD99310 lea rcx,[std::cout (013FEE86F0h)]
000000013FD99317 jmp std::basic_ostream<char,std::char_traits<char> >::operator<< (013FD71A0Ah)
--- No source file -------------------------------------------------------------
000000013FD9931C int 3
000000013FD9931D int 3
000000013FD9931E int 3
000000013FD9931F int 3
--- c:\open4\open4\graphics2\renderer.cpp --------------------------------------

void CRenderer::setCameraPar(int left, int top, int width , int height)
{
000000013FD99320 movd xmm1,dword ptr [height]
000000013FD99326 movd xmm0,r9d
m_fRight = width;
m_fBottom = height;
000000013FD9932B cvtdq2ps xmm1,xmm1
000000013FD9932E cvtdq2ps xmm0,xmm0
000000013FD99331 movss dword ptr [rcx+1CCh],xmm1
000000013FD99339 movss dword ptr [rcx+1C8h],xmm0
}
000000013FD99341 ret
--- No source file -------------------------------------------------------------
000000013FD99342 int 3
000000013FD99343 int 3
000000013FD99344 int 3
000000013FD99345 int 3
000000013FD99346 int 3
000000013FD99347 int 3
000000013FD99348 int 3
000000013FD99349 int 3
000000013FD9934A int 3
000000013FD9934B int 3
000000013FD9934C int 3
000000013FD9934D int 3
000000013FD9934E int 3
000000013FD9934F int 3
--- c:\open4\open4\graphics2\renderer.cpp --------------------------------------
m_pEffect = pEff;
000000013FD99350 mov qword ptr [rcx+0E0h],rdx
}
000000013FD99357 ret



grazie.

ps.Uso le qt 5.1 puo essere causa di errore nel debug? perch le qt usano delle dll e io ho compilato tutto come libreria statica e includo le qt con dll e lib nel modo microsoft per le dll (dll_export ecc..).
grazie.

giuseppe500
07-01-2014, 04:23
dependency walker mi dice che mancano questi files , c' percaso da installare il win sdk 8 ?
ho letto che si puo installare in win 7.

API-MS-WIN-APPMODEL-RUNTIME-L1-1-0.DLL

API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-1.DLL
DCOMP.DLL
IESHIMS.DLL

grazie.

giuseppe500
07-01-2014, 16:08
ciao.
ho provato a mettere la dll da includere in un programma di test e il comportamento lo stesso , poi ho settato la dll come delayload e tutto si messo a funzionare perfettamente(nel progetto di prova).
ho provato a fare lo stesso nel mio progetto solo che mi da quest errore:


LINK : fatal error LNK1194: cannot delay-load 'GraphicsD.dll' due to import of data symbol '"__declspec(dllimport) const OPEN::CColumn::`vftable'" (__imp_??_7CColumn@OPEN@@6B@)'; link without /DELAYLOAD:GraphicsD.dll

e non capisco perch! relativo a column.h qui sotto; ma cosa vuol dire?



#pragma once
#include "Mesh.hpp"
#include "Shape.hpp"
#include "Entity.h"
#include <QtGui\qopenglfunctions_3_3_compatibility.h>
#include "GraphicsLibs.h"
namespace OPEN{


class GRAPHICS_ITEM CColumn : public CEntity
{
public:
CMesh<CEffect>* m_pMeshNormal;
CMesh<CEffect>* m_pRay;
CEffect* m_pEff;
CColumn(){func.initializeOpenGLFunctions();};
CColumn(CEffect* pEff){
m_pEff = pEff;
m_pRay = NULL;
m_bIsSelected = false;
}
bool IntersectRay(const glm::vec3& v0, const glm::vec3& v1);
~CColumn(){};
void Init();
void DrawGl();
void SetDirectionVector(const glm::vec3& vDir);
CTransform GetTransform();

private:
QOpenGLFunctions_3_3_Compatibility func;
CTransform m_transform;
glm::vec3 m_directionV;
bool m_bIsSelected;
};
}


grazie.

Loading