2011-09-29 40 views
7

mỗi mặc định, khi soạn thảo một dự án Visual Studio ở chế độ phát hành, đường dẫn đầy đủ đến pdb được đưa vào các tập tin hình ảnh, ví dụ:Strip đường dẫn đến pdb

c:\myprojects\demo\release\test.pdb 

Sử dụng một công tắc mối liên kết không có giấy tờ (/pdbpath:none) ai có thể buộc Visual Studio 2008 để giảm tên đủ điều kiện đầy đủ các pdb, ví dụ:

test.pdb 

tôi cần phải làm tương tự với một dự án mà vẫn xây dựng sử dụng VC6.

Tôi đã thử chuyển đổi "/pdbpath:none" ở cấp cài đặt dự án, nhưng trình liên kết phàn nàn về công tắc không xác định này.

Có ai biết phương thức (hoặc công cụ) để thực hiện điều này khi liên kết dự án VC6 hoặc sau đó trực tiếp ở cấp độ hình ảnh không?

+0

Công tắc này có sẵn (được tài liệu) bắt đầu bằng Visual Studio 2010 – mox

+0

Công tắc này cũng hoạt động với Visual Studio 2008. – mox

+0

Có một công cụ gọi là peupdate ([trang web tại đây] (http://bytepointer.com/tools/index .htm # peupdate)) sẽ loại bỏ, loại bỏ hoặc thay đổi chuỗi PDB này thành bất kỳ giá trị tùy ý nào cho một EXE hoặc DLL. Đối với câu hỏi cụ thể của bạn, bạn sẽ sử dụng tùy chọn "-s" (dải) để xóa đường dẫn nhưng vẫn giữ nguyên tên tệp. – byteptr

Trả lời

2

Đặt cược tốt nhất của bạn là sử dụng trực tiếp pdbstr.exe từ MS. Nó cho phép trích xuất trực tiếp, cập nhật, và các chức năng khác trực tiếp, độc lập với phiên bản trình biên dịch (lên đến phiên bản được hỗ trợ cuối cùng, mà tôi nghĩ là VS2013 ngay bây giờ). Chúng tôi sử dụng nó để thêm các liên kết SVN trực tiếp vào PDBs mà chúng tôi lưu trữ trong các cửa hàng ký hiệu cục bộ sử dụng srctool.

+0

Cảm ơn! Thật thú vị khi thấy rằng tiện ích này sử dụng Alternate Data Stream (ADS) ... "để chèn thông tin điều khiển phiên bản vào" srcsrv "luồng thay thế của tệp .pdb đích". – mox

+0

Dòng lệnh ví dụ là gì để sử dụng pdbstr.exe? Ngay cả với các tài liệu, tôi không thể tìm ra cách để loại bỏ con đường. – byteptr

+0

@byteptr Xin lỗi vì trả lời muộn. Chúng tôi sử dụng Tập lệnh Poweshell để tạo khối mới của chúng tôi trong tệp luồng tạm thời ($ streamContent), sau đó gọi trực tiếp tập tin thực thi như sau: . "$ ToolPath" /pdbstr.exe -w -s: srcsrv "-p: $ pdbFullName" "-i: $ streamContent" Điều này thêm luồng đã cho dưới dạng luồng srcsrv vào pdb được chỉ định trong $ pdbFullName, bao gồm và mọi thứ. – Woody14619

0

Đối với phiên bản link.exe mới hơn, cú pháp đã thay đổi.

Các tùy chọn mà bạn muốn tại là /pdbaltpath:%_PDB%

Nó là tài liệu trên MSDN: https://msdn.microsoft.com/en-us/library/dd998269.aspx

%_PDB% mở rộng tên tập tin của tập tin PDB thực tế mà không cần bất kỳ thông tin đường dẫn

Đối với VC6, bạn có thể muốn tiếp tục sử dụng cùng một trình biên dịch nhưng phiên bản mới là link.exe.

Bộ điều khiển Windows cũng đi kèm với một công cụ có tên binplace.exe có thể sửa đổi thông tin sau khi xây dựng này.

+0

Điều này dường như bị hỏng đối với các thư viện tĩnh.LNK4044: tùy chọn không được công nhận '/ pdbaltpath:% _ PDB%'; bỏ qua – syplex

+0

@syplex: Bạn đang sử dụng phiên bản trình liên kết nào? Và thư viện tĩnh phải làm gì với vấn đề của bạn? –

+0

Đã thử một vài phiên bản. Lên đến phiên bản 14.12.25835.0. Cố gắng tìm ra cách chỉ định hoặc thay đổi đường dẫn PDB cho một thư viện tĩnh. Đường dẫn được nhúng vào .lib giống như nó dành cho các tệp DLL/EXE (mặc dù khác nhau) nhưng không có cách nào để sửa đổi nó. Tôi mong đợi một cái gì đó như PDBALTPATH ​​để làm việc cho điều này, nhưng đã không tìm thấy bất cứ điều gì. – syplex

Các vấn đề liên quan