Fragensteller
lokaler pfad zu der PDB-Datei in der class-library

Allgemeine Diskussion
-
hallo zusammen,
ich möchte logdateien erstellen und in die erstellte logdatei unter anderem die aktuelle zeilennummer im code schreiben. dies erreiche ich über den StackFrame. Nun an die zeilennummer im code kommt man nicht ohne die PDB-Datei dran. wenn ich das auch lokal auf meinem rechner mache, klappt das alles. aber nicht auf einem anderen rechner. dann hab ich die betroffene dll-datei mit dem Editor geöffnet und sehe da einen absoluten bzw. lokalen pfad zu der zugehörigen pdb-datei neben dem ganzen verschlüsselten inhalt und es wurde mir klar, dass es darum auch nur auf meinem rechner funktionieren kann.
nun weiss ich nicht wieso dieser pfad so in meiner dll drin steht, und wie ich das problem lösen könnte.
würde mich über vorschläge und lösungnsansätze sehr freuen.
danke im voraus
a.v.
- Bearbeitet Deeeeeeeeeeee Mittwoch, 16. Mai 2012 12:17
- Typ geändert Robert BreitenhoferModerator Montag, 21. Mai 2012 10:32 Keine Rückmeldung des Fragenstellender
Alle Antworten
-
-
wie sonst kann ich die zeilennummer der aktuellen stelle protokollieren?
Bei Anwendungen, die als Release kompiliert wurden und bei denen die .pdb nicht weitergegeben wird, gar nicht.
Die .pdb Datei sollte im selben Verzeichnis wie die .dll bzw. .exe liegen, dann klappt das auch. Da brauchst Du keinen absoluten/relativen/... Pfad, das passiert ganz automatisch.
Dass im Kompilat der Pfad zur .pdb auf deinem Rechner steht, ist normal. Das hat aber nichts damit zu tun. Leg einfach die passende .pdb ins selbe Verzeichnis und alles wird gut :)
Beachte aber dennoch Martin's Hinweis zu Reverse Engineering. Allerdings klappt das auch ohne .pdb ganz gut, siehe Tools wie JustDecompile
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Vergiß das doch einfach und erzeuge einen Minidump. Da steht alles drin was Du brauchst... Zur Not schreibst Du noch ein paar andere Infos in eine Textdatei.
Ansonsten kann man auch mit __FUNCTION__ im Code arbeiten. Dann brauchst Du auch keine Codezeile.
Zu was sol das dienen? Allgemeines loggen, oder Fehlersuche und Crashdumps?
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
-
Hi Jungs,
Jochen Kalmbach: Was hat das damit zu tun???
Martin Richter: Mit C++ ;) Das wage ich zu bezweifeln...
von was redet ihr eigentlich? So ganz ohne Zitat weiß doch keiner, auf was ihr euch bezieht. Sein(e) Posting(s), mein Posting, was ganz anderes, ...? :)
Ist der OP bei euch in VC++ Gast, dass ihr davon ausgeht, dass er das mit C++ macht? (Das will ich eigentlich nur wissen, damit ich verstehe, auf was ihr euch bezieht^^)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
öffne bitte die entsprechende dll mit nem editor und schau nach ob du auch einen lokalen pfad zu deiner pdb als klartext darin findest
Was in der PDB-Datei steht, dient nur zur Info. Die PDB wird normal gefunden, wenn sie im gleichen Verzeichnis wie die EXE liegt; unabhängig welche Pfade in der PDB drin stehen...
Jochen Kalmbach (MVP VC++) -
Weil es um die direkte Auflösung des Stackframes geht. Das ist in der .NET Welt so einfach nihct möglich.
Ich gehe also zu 95% davon aus, dass es um C++ undnativen Code geht.
Sorry: Sicher hätte ich die Annahme dazuschreiben solllen.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
-
Weil es um die direkte Auflösung des Stackframes geht. Das ist in der .NET Welt so einfach nihct möglich.
Also ich weiß jetzt nicht, was Du meinst. Aber wenn es das hier ist, geht das recht einfach:
using System.Diagnostics; ... try { ... } catch( Exception ex ) { StackTrace st = new StackTrace( ex, true ); StackFrame sf = st.GetFrame(0); int LineNumber = sf.GetFileLineNumber(); ... }
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Das ganze geht in .NET auch ohne, dass man zuvor eine Exception erzeugen muss...
namespace ConsoleApplicationVs2010 { internal class Program { private static void Main(string[] args) { var s = new System.Diagnostics.StackTrace(true); foreach(var f in s.GetFrames()) { Console.WriteLine("{0}: {1}", f.GetFileName(), f.GetFileLineNumber()); } } } }
Jochen Kalmbach (MVP VC++) -
Vergiß das doch einfach und erzeuge einen Minidump. Da steht alles drin was Du brauchst... Zur Not schreibst Du noch ein paar andere Infos in eine Textdatei.
Ansonsten kann man auch mit __FUNCTION__ im Code arbeiten. Dann brauchst Du auch keine Codezeile.
Zu was sol das dienen? Allgemeines loggen, oder Fehlersuche und Crashdumps?
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
das soll der fehlersuche dienen...
ich werde mich jetzt damit beschäftigen wie ich einen minidump erzeugen kann und was mir so ein minidump alles liefern kann, und mir __FUNCTION__ unter die lupe nehmen. hab damit keinerlei erfahrungen gemacht bis heute...
wenn du mir auf diesem weg etwas weiterhelfen würdest, wäre ich dir dankbar.
p.s. ja ihr hattet recht, der pfad ist zwar in der dll drin, aber die dll bezieht sich auf die pdb die im eigenen verzeichnis lieg.
- Bearbeitet Deeeeeeeeeeee Mittwoch, 16. Mai 2012 11:54
-
also die variante mit dem minidump kann ich vergessen da es nicht so einfach geht in c# und ausserdem brauch ich nur ein paar kleine infos die ich in eine textdatei schreiben möchte...
__FUNCTION__ wird in c# nicht unterstützt.
der stackframe funktioniert ja auch nur mit der pdb zusammen... also anscheinend keine lösung!
-
Hi,
falls Du bspw. die Methoden/Klassennamen ermitteln willst, siehe:
Dass bestimmte Sachen eben nicht gehen, weißt Du ja nun. StackTrace und Stackframe funktionieren auch ohne .pdb. Nur halt nicht so aussagekräftig.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hi,
falls Du bspw. die Methoden/Klassennamen ermitteln willst, siehe:
Dass bestimmte Sachen eben nicht gehen, weißt Du ja nun. StackTrace und Stackframe funktionieren auch ohne .pdb. Nur halt nicht so aussagekräftig.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
hi, danke für den hinweis. das hab ich bereits alles drin... das einzige was unlösbar scheint, ist die aktuelle zeilennummer
-
Hi,
ist es auch, wenn Du die pdb nicht mitgibst. Aber wo ist da nun das Problem? Wenn Du die Zeilennummer zwingend brauchst, lass halt eine minimal ausgestattete PDB erzeugen und leg die im selben Verzeichnis wie die DLL bzw. EXE ab.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
****************************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
****************************************************************************************************************Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.