我正在使用标准命令构建可执行文件:
add_executable(MyExe ac bc)
我正在调整CMAKE_EXE_LINKER_FLAGS以发出一个地图文件,它可以正常工作.
但是,如果删除映射文件,则执行增量构建不会重新生成映射文件.这是有道理的,因为我没有表达过cmake地图文件依赖于MyExe.在上面的场景中,MyExe.map甚至不是目标,因此cmake甚至不知道它存在.
我已经尝试创建自定义目标,但我无法创建重新生成映射文件的自定义命令,因为它来自add_executable.然后我尝试使用add_dependencies(),但这似乎只影响构建顺序.
我可以显式地重新运行链接器作为构建自定义目标的自定义命令,但这似乎很浪费,因为链接确实需要一些时间.
几乎看起来我需要一些方法来告诉add_executable除了可执行映像之外还有更多的输出.有没有办法做到这一点?
如果有人能指出我正确的方向,我会很感激!提前感谢您的阅读.
这是完整的错误:
消息4864,级别16,状态1,行3第1行第5列(FK_User_CreatedBy)的批量装入数据转换错误(指定代码页的类型不匹配或无效字符).
这是我痛苦的存在主义快照:)
很多问题触及了这些问题,但没有一个能够解决这个问题......
我怀疑我的问题就像这里描述的那样,但我不确定.未正确跳过的目标表列不是稀疏的.
这是在记事本和记事本++中打开的用于导入的两行数据文件(.csv):(是的我知道行终止符是\ r \n而字段/列终止符是\ t或',')
这是纯文本:
1,fArty,Padul,1,10/1/1962,Head of ,Australia,AU Talavera Centre,NSW,7 CSU,farty.randy@gummibaer.com
2,mifsm,Jodel,1,10/1/1970,Chief Officer,Australia,AU ,NSW,8 CSU,midsm@gummibaer.com
Run Code Online (Sandbox Code Playgroud)
背景/背景: 在没有记录的情况下对小表和输入文件进行测试(记住它是在具有许多列的表上跳过列,最终会损坏)...
导入适用于小型数据库表,如下所示:
因此创建:
以下是表创建的代码:
DROP TABLE dbo.tbl_Person_Importtest
CREATE TABLE dbo.tbl_Person_Importtest
(
ID int PRIMARY KEY NOT NULL,
LastName varchar(100) NOT NULL,
FirstName varchar(100) NOT NULL,
FK_Gender varchar(4) NOT NULL,
DateOfBirth date NOT NULL,
JobTitle varchar(200) NOT NULL,
Address1Country varchar(50) NOT NULL,
Location varchar(200) NOT NULL,
Address1StateOrProvince varchar(50) NOT NULL,
Department varchar(200) NOT NULL, …Run Code Online (Sandbox Code Playgroud) 我有一个 elf 文件,在使用 elfparser 分析映射文件和 elf 时,我看到一个名为 .Debug_info 的部分,它占用了最大的内存。
我正在使用 xt-xc++ 为 xtensa DSP 进行编译,我还没有使用 -g 选项,也没有使用 -o2 优化级别。
是否可以在发布版本中删除它?
在新的VCL应用程序中,编译和构建操作会生成相同的二进制文件和映射文件(即使"项目中包含版本信息"选项已关闭,也会在.exe文件末尾略有不同 - 已经讨论过).映射文件的字节与字节相同.但是,我添加任何第三方组件,由Build和Compile生成的二进制和map(!)文件明显不同!
测试了两个版本的Delphi:
- 7.0版(Build 8.1)
- CodeGear™RAD Studio 2007版本11.0.1902.0471(+ 2007年12月更新)
重现步骤:
我们有几乎不同的.exe文件和完全相同的.map文件.然后,如果我们再次重复所有步骤但在项目第三方组件中使用(我尝试ODAC,DOA,DevExpress和selfmade),我们会得到更多不同的.exe和不同的.map文件.
为什么?有什么建议?
更新
有关我如何找到这个以及为什么它让我感兴趣的一些信息:
Project是使用MSBuild从简单的脚本构建的.当在项目中添加了通过ITE(带有资源的dll)的翻译时,我发现当项目是Build(来自脚本或来自IDE)时 - 翻译版本工作错误 - 按钮,标签等上的某些文本来自错误的地方(字面意思来自另一个按钮,标签).当项目从IDE编译时 - 一切正常.所以我开始比较Build和Compile输出......
我想将地图文件添加为资源,然后在每次执行系统时提取文件,以确保地图文件始终正确,并使支持的生命更容易.在Delphi 7中,我可以使用map文件作为资源来编译项目,但是映射是错误的,因为当引发异常时,调用堆栈是错误的.在Delphi Seattle中,我甚至无法编译,因为它会在生成映射之前尝试添加资源.我知道我可以在后编译thask中添加该文件,但有没有办法在编译/构建时间中执行此操作?对不起,如果我不是很具体,这是我的第一个问题.谢谢.
UPDATE
在我读了一些答案之后,我做了一些研究.我在我的项目中已经使用了JEDI异常单元,但我不知道JEDI Debug专家.它完全符合我的要求和更多.JEDI Debug专家将.map文件转换为.jdbg文件,这是一个加密的map文件(map只是一个文本文件).此外,jdbg文件比地图小约12%.它还具有将jdbg插入二进制(exe)的选项.为此,我启用了选项:
项目 - > JCL调试专家 - >生成.jdbg文件 - >为此项目启用
项目 - > JCL调试专家 - >将jdbg数据插入二进制 - >为此项目启用
项目 - > JCL调试专家 - >转换后删除地图文件 - >启用此项目(如果要删除文件,当然)
要在IDE外部使用此工具,例如Jenkins,我必须在JEDI\jcl\examples\windows\debug\tools\MakeJclDbg.dpr中构建项目.构建之后,它将在jcl的bin目录中生成exe文件.如何使用:
MakeJclDbg -J -E -M map_filename
J - 创建.JDBG文件
E - 将调试数据插入可执行文件
M - 转换后删除MAP文件
可执行文件必须与MAP文件位于同一目录中.这将创建jdbg文件(基于映射文件),插入exe并删除映射.有了这个(以及JEDI的异常单元),当引发异常时,它可用于堆栈跟踪,系统使用的所有dll的版本,操作系统信息等,并且还将所有这些发送到电子邮件.
我意识到Embarcadero也有他们的bpl的jdbg文件,所以我认为他们也使用JCL工具.
在VS2013更新2 RC(Typescript 1.0 RTM)中,我无法在我的一个项目中调试TypeScript文件.我已将其追溯到地图文件声明.默认情况下,我的JS文件包含:
//# sourceMappingURL=general.js.map
Run Code Online (Sandbox Code Playgroud)
哪个应该是正确的,映射文件与TS和JS文件位于同一文件夹中.但它不起作用.如果我手动编辑文件,指定完整路径,它的工作原理如下:
//# sourceMappingURL=C:/Users/myname/Documents/Visual Studio 2013/Projects/Test/JSLib/general.js.map
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑,因为浏览器肯定不会理解完整路径,例如在IISExpress网站之外?
任何人都可以建议一种方法来获取使用第一个映射的地图文件?谢谢
Windows 8.1 x64,IE11
更新:通过IISExpress运行的应用程序使用Windows身份验证.如果我关闭地图文件加载!另外,检查输出窗口我看到:
SourceMap http://localhost:53524/JSLib/general.js.map read failed: The remote server returned an error: (401) Unauthorized.'iexplore.exe' (Script): Loaded 'http://localhost:53524/JSLib/'.
我的IIS Express日志包含
2014-04-12 13:58:24 ::1 GET /JSLib/general.js.map - 53524 - ::1 - - 401 2 5 0
但我可以http://localhost:53524/JSLib/general.js.map在IE 浏览器中浏览.那么是什么在调用地图文件(VS?)以及如何让它使用我的凭据?
我已经开发了一个客户,他在进行某项操作时会遇到这个问题.这不会发生在同一个地方和相同的数据上,而且,它不会发生,也不会发生在我的本地开发机器上,也不会发生在我的测试虚拟机(没有所有开发设备)中.
鉴于这些条件,我决定使用MAP进行编译(在配置属性 - >链接器 - >调试器中启用选项/ MAP)以查看哪个函数导致崩溃.
如果我已经正确理解,当程序崩溃时我要检查偏移错误然后在我的MAP中搜索RVA + BASE列:
Address Publics by Value Rva+Base Lib:Object
0001:00037af0 ?PersonalizzaPlancia@CDlgGestioneDatiProgetto@MosaicoDialogs@@IAEXXZ 00438af0 f DlgGestioneDatiProgetto.obj
0001:00038000 ?SalvaTemporanei@CDlgGestioneDatiProgetto@MosaicoDialogs@@IAEXXZ 00439000 f DlgGestioneDatiProgetto.obj
Run Code Online (Sandbox Code Playgroud)
实际上,我的崩溃发生在偏移:
00038C90Run Code Online (Sandbox Code Playgroud) 所以我认为它在方法中的某个地方:
MosaicoDialogs::CDlgGestioneDatiProgetto::PersonalizzaPlanciaRun Code Online (Sandbox Code Playgroud)
但这并非绝对可能,所以假设计算机不能出错,我就是那个做得不好的人.
有人能解释我如何以正确的方式阅读MAP吗?
在下面的文章解释说,为了找到一个JavaScript文件,如源地图的jQuery,Web浏览器看起来的JavaScript代码内,查找包含线sourceMappingURL嵌入JavaScript注释指令.例如,jQuery 1.9.0缩小文件在文件末尾包含这样的指令.但是,最新的jQuery 1.11.1缩小版本不包含这样的指令,但jQuery 1.11.1映射文件也随这个(最终稳定的jQuery 1)版本一起发布.那么Web浏览器如何找到缩小文件的映射文件.
我想sourceMappingURL删除了寻找该指令的Web浏览器的惯例,以支持遵循寻找同名文件的命名约定,并.js替换为.min.这是怎么回事?
根据最近发布的Firefox Developer Edition的文档,这样的浏览器似乎仍然在寻找sourceMappingURL指令.
谢谢.
使用以下 bash 代码来处理使用 mapfile 随机传递的文件名。我想调用rsync每个文件并将其发送到目标路径dpath。
mapfile -d '' fl < <(
find "$dpath" -maxdepth 1 -type f "${inclnm[@]}" |
shuf -z -n "$nf"
)
Run Code Online (Sandbox Code Playgroud)
或者shuf直接处理参数
mapfile -d '' fl < <( shuf -z -n "$nf" -e "${inclnm[@]}" )
Run Code Online (Sandbox Code Playgroud)
如何修改两个替代方案以rsync在每个文件上运行并发送到目的地?
map-files ×9
c++ ×2
delphi ×2
bash ×1
build ×1
bulkinsert ×1
cmake ×1
compilation ×1
conventions ×1
database ×1
delphi-7 ×1
elf ×1
html ×1
javascript ×1
jquery ×1
mfc ×1
resources ×1
rsync ×1
sql ×1
sql-server ×1
typescript ×1