首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在没有调试器/stacktrace的情况下,我可以在bash脚本中找到调用函数的行吗?

在没有调试器/stacktrace的情况下,要在bash脚本中找到调用函数的行,可以通过以下方法实现:

  1. 使用$LINENO内置变量:在bash脚本中,$LINENO表示当前行号。可以在函数中使用$LINENO来获取函数调用的行号。例如:
代码语言:txt
复制
#!/bin/bash

function my_function() {
    echo "Function called at line: $1"
}

my_function $LINENO

在上述示例中,my_function函数接受一个参数,即调用函数的行号。通过传递$LINENO作为参数,可以获取调用函数的行号。

  1. 使用caller命令:caller命令可以显示调用堆栈的信息,包括函数名和行号。可以在函数中使用caller命令来获取调用函数的行号。例如:
代码语言:txt
复制
#!/bin/bash

function my_function() {
    local caller_info=$(caller 0)
    echo "Function called at line: $caller_info"
}

my_function

在上述示例中,my_function函数使用caller命令获取调用函数的信息,并将其打印出来。

需要注意的是,以上方法都是在bash脚本中模拟调试器的功能,通过获取行号或调用堆栈信息来定位函数调用的行。然而,这些方法并不如调试器或stacktrace提供的信息详尽和准确。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何解决Xcode中SIGABRT错误

大家好,又见面了,是你们朋友全栈君。 一分钟,您iOS应用程序可以Xcode中正常运行,而下一分钟,它由于不可思议SIGABRT错误而崩溃了。这是怎么回事!?...该行被突出显示,因为它是您应用程序第一行代码。AppDelegate除非您绝对确定其中存在错误,否则不要浪费时间课堂上。 stacktrace是导致应用崩溃函数调用列表。...该违规代码是第21行ViewController.swift,内部viewDidLoad()功能 你甚至可以看到,我们所使用标的“吸气”Array 崩溃之前,进行了大量与视图控制器相关函数调用...根据获得信息bt,我们可以代码中找到有问题行并进行修复。...惊人! 请记住,stacktrace是从外向内运行。堆栈跟踪显示顶级函数调用底部,往上走堆越高,越深电话去。最新,最新,最深层调用位于堆栈顶部。

6.1K20
  • .net项目中生成pdb(程序数据文件)是什么文件?

    这些PDBs对于某些用户某些情况下会非常有用,因为某些用户没有PDB会使生活变得困难。 这并不是说您必须拥有PDBs和二进制部署来获得关于异常额外信息。...同样可以使用符号服务器和源索引来实现,将在下面的主题中讨论。 和PDB安全风险吗? 任何使用DLL/EXE的人都可以很容易地进行反向工程,使用诸如反射器之类工具来生成带有或不带PDB源代码。...Symbol Server符号服务器 符号服务器用来存储被调试器所知道pdb文件,可以用来查找更详细调用堆栈信息。...在下面的截图中,您可以看到我已经加载了符号,现在符号状态显示了“Symbols loaded”。 ? 这怎么有用呢? 您可以代码中放置断点,并在没有加载符号情况下查看调用堆栈。...下图显示了没有加载符号调用堆栈,它只是将我方法和BCL方法显示为[外部代码]。 ? 加载了这些符号之后,调用栈将在断点之前显示所有的方法调用(参见下图)。

    2K30

    Shell脚本开发,超神存在!这款Bash开发工具,你值得拥有!

    我们可以断言,没有比 BashSupport Pro 更好 Bash 开发工具了! 功能特性 智能编辑 在编辑器中,我们为您提供了语法高亮、 代码折叠,语言注入等功能。...脚本执行 您可以使用 BashSupport Pro 自由执行 Bash 脚本文件和 代码片段。您可以利用代码片段将脚本和多个配置内容保存在同一文件中。有关脚本执行内容都定义 运行配置中。... Windows 环境中执行 Bash 脚本时,您可以通过配置文件进行自动路径映射。您还可以导入和导出其他 Bash 插件运行配置。...您可以大家使用不同操作系统情况下将您运行配置分享给团队中任何人。...复杂项目中,您还可以将一组 Bash 脚本定义为 shell 脚本库 ,这将大幅简化启动 BashSupport Pro 代码检查功能流程。 安装使用 插件安装 中打开插件设置。

    1.5K10

    js_调试_01_14 个你可能不知道 JavaScript 调试技巧

    最常用两种方式是: 调试器中找到相应行并设置一个断点 在你脚本中添加一个 debugger 以上两种方法,你都必须到你文件中找到你想调试那一行。...console 中输入 debug(car.funcY),调试模式下当调用 car.faunY 时脚本会停下来: ?...不相关黑盒脚本 我们经常会在我们网页应用中用到一些库和框架。他们中大部分都经过良好测试且相对来说错误较少。但是,调试器执行调试任务时还是会进入这些不相关文件。...一个解决办法是将你不需要调试脚本设置成黑盒。也包括你自己脚本。更多关于调试黑盒信息请参考这篇文章 10. 复杂调试中找到重要信息 更复杂调试中我们有时想输出很多行。...总之,尽情发挥你创造力吧。 11. 监控一个特定函数调用及其参数 Chrome console 面板中,你可以监视一个特定函数。每次该函数调用,它将连同传入参数一起打印出来。

    51930

    编写快速安全Bash脚本建议

    还有 局部变量 ,它们作用域只能存在于bash函数中。 基本上从来没有使用过这样函数(不像我写其他编程语言),从来没有使用过局部变量。 for循环 以下是bash中编写循环方法。...fi 函数不是那么难 bash 中定义和调用函数(特别是没有参数)是非常容易。...my_function () { echo "This is a function"; } my_function #调用函数 总是引用你变量 另一个 bash 技巧:绝不使用一个没有引用变量。...awesome fi 有些情况下,只要使用 $ X 而不是 “$ X” 就可以,但是您可以知道何时可以,何时不行吗?...这在 bash 中是有作用,因为:有时从命令行运行一个程序,并希望仅在第一个程序成功情况下运行第二个程序。 你可以用 && 实现!

    1.8K80

    你还在用 console.log 调试 ?

    ,您可以在其中找到您需要调试文件。...也就是说,函数调用将被跳过,除非您在函数中设置了断点,否则调试器将不会在该函数中停止。 ?...调试器等待2秒后才移动到第29行 退出函数调用 假设调试代码时,您不想进入某个函数内部,Step Out of function call 允许您退出函数并在函数调用下一行停止。 ?...查看调用堆栈 查看调用堆栈是开发者工具提供最有用工具之一:您不仅可以调用它们函数中来回跳转,还可以每个步骤检查它们作用域。...例如,如果有99%时间只调试 userland 中代码感兴趣,可以 Blackbox 中添加一个模式,将 node_modules 文件夹下所有脚本过滤掉。

    1.6K10

    Linux调试工具

    没有固定答案,要视具体情况而定。对于小程序来说,进入main时调用mtrace,退出main函数调用muntrace。...同时也可能是出于偷懒原因,大多数程序里并没有做这样检查。 这样程序,一旦出现错误,用调试器一步一步定位错误,然后想法查出错误原因,也是可以,不过比较麻烦,对调试器来说有些大材小用,不太可取。...比如,linux中,共享库里所有非static函数/全局变量都是export,更糟是C语言中没有名字空间这个概念,导致函数名极易冲突。多个共享库中,名字冲突引起BUG是比较难查。...Valgrind是最爱,用习惯了,写程序不在valgrind下跑一遍,就像没有写单元测试程序一样,有点放心不下。它有BoundsChecker/Purify功能,而且速度更快。...PinkTrace目标是为跟踪程序提供一个跨平台库。另外,...更多PinkTrace信息 BASH Debugger Shell 脚本调试器

    9.9K43

    TensorFlowDebugger调试实例

    看个人习惯吧) from tensorflow.python import debug as tfdbg 然后创建完Session对象后,用调试器Session进行封装 # 没有调试器之前写法with...这是可以输入运行指令(如果不清楚TensorFlow Debugger指令,可以查看之前教程) r -f has_inf_or_nan 这样运行就会在有过滤器情况下运行,并会捕获出现了过滤器指定数值...按照图中顺序,出现nan值第一个Tensor是d_loss/Log:0,那么这个时候可以用下列指令直接查看这个Tensor值 pt d_loss/Log:0 -a 很显然,你会在打印数值中找到nan...从结果中可以看到,这个张量有一个输入张量Discrim/add_2,这个时候用指令pt查看下Discrim/add_2数值,发现在调用tf.log计算前(就是输入到d_loss/Log:0节点前)数值为...(D_output2, dWeights3) + dbiases3"这行,于是发现由于输出D_output3时候,是直接输出没有加sigmoid激活函数,导致输出值为负,然后输出之前添加sigmoid

    1.1K60

    linux之shell编程基本语法

    /bin/bash ## 表示用哪一种shell解析器来解析执行我们这个脚本程序 echo "hello world" ## 注释也可以写在这里 ## 这是一行注释 执行脚本 sh intsmaze.sh.../bin/bash b="b in b.sh" echo $b echo $a 然后执行  ./a.sh ,会发现b脚本中并没有把a脚本中定义a变量打印出来。.../b.sh   ## 则,b.sh就在a.sh所在bash进程空间中运行,而不是a进程中子进程中运行了。...总结: 1、a.sh中直接调用b.sh,会让b.sha所在bash进程“子进程”空间中执行 2、而子进程空间只能访问父进程中用export定义变量 3、一个shell进程无法将自己定义变量提升到父进程空间中去...4、“.”号执行脚本时,会让脚本调用者所在shell进程空间中执行 3、反引号赋值 A=`ls -la`    ## 反引号,运行里面的命令,并把结果返回给变量A A=$(ls -la)   ##

    82220

    Python Debug(调试)终极指南

    这种方法远不是理想,有更好方法可以找出代码错误所在,本文将探讨其中一些问题和应对方法。 ? 日志是必须 如果在编写应用程序时没有设置日志记录,那么您最终会后悔。...为了避免代码中到处查看丢失了哪个键(key),你可以实现特殊__miss__方法,每次KeyError被提出时调用。...此时,您可以检查变量和函数。 如果这还不够好,您可以带一个更强大工具 - pdb - Python调试器。pdb有很多特性,可以单独写一篇文章来说明。但这里有一个例子和最重要部分纲要。...在这种情况下,你可以使用traceback和sys包来了解你代码中失败地方: import traceback import sys def func(): try: raise...调试期间重新加载模块 有时,您可能在交互式shell中调试或试验某些函数,并经常对其进行更改。

    1.3K40

    TensorFlowDebugger调试实例

    ,看个人习惯吧) from tensorflow.python import debug as tfdbg 然后创建完Session对象后,用调试器Session进行封装 # 没有调试器之前写法...02 调试过程 在用调试器封装好Session对象之后,就可以启动代码,运行后会看到如下界面: ?...pt d_loss/Log:0 -a 很显然,你会在打印数值中找到nan或者inf值,但是调试本意并不是查看这些nan值,而是需要知道来源,因此,我们需要知道这个Tensor数据来源,可以使用下列指令...从结果中可以看到,这个张量有一个输入张量Discrim/add_2,这个时候用指令pt查看下Discrim/add_2数值,发现在调用tf.log计算前(就是输入到d_loss/Log:0节点前)数值为...(D_output2, dWeights3) + dbiases3"这行,于是发现由于输出D_output3时候,是直接输出没有加sigmoid激活函数,导致输出值为负,然后输出之前添加sigmoid

    1.3K90

    2018年伊始,系统编程语言Rust为何令程序员感到兴奋?

    要发布第一个版本,还有许多工作要做,但在笔记本电脑上,它可以35个不同Ruby版本 (从1.9.1到2.5.0)上使用!即使Ruby程序符号被剥离并且没有调试信息,它也可以工作!...开始使用Rust时候,能够做到这样权衡(牺牲一点性能情况下使程序更容易编写)是非常好。最喜欢这个特别权衡地方是它是明确。...可以程序里用.clone()搜索每个地方 ,并对它们进行审计—这个函数是否被调用了很多次?应该担心吗?刚刚查过程序中使用clone()每一个地方,程序开始时候,只调用一次或两次。...Rust中,可以控制程序每一个方面—确切地知道系统调用它做什么,它分配内存,它休眠了多少微秒—一切。C语言中可以任何事情,都可以Rust中做。...目标1: “Rust:现在更容易使用” Rust有一个巨大机会来赋予人们编写有趣和困难程序,而这些程序是没有Rust情况下不可能写。像个人资料!网络软件!调试器!操作系统!

    4.6K100

    NumPy 秘籍中文第二版:七、性能分析和调试

    我们可以也分析较大脚本。 我们将展示两种方法。...,该小脚本可以反转包含随机值大小可变矩阵。...下表概述了分析器输出: 函数 描述 ncalls 这是调用次数 tottime 这是一个函数花费总时间 percall 这是每次通话所花费时间 ,计算方法是将总时间除以通话次数 cumtime 这是函数和由函数调用函数...((n, n)) return random_values.T 运行分析器,并为其提供待分析函数: cProfile.run('transpose (1000)') 可以以下片段中找到本教程完整代码...使用了以下调试器命令: 函数 描述 list或 l 列出源代码 bt 显示调用栈 u 向上移动调用栈 d 下移调用栈 另见 Python 调试器文档 ipdb 包主页 使用 PuDB 进行调试 PuDB

    99310

    【调试】ftrace(一)基本使用方法

    如果回调被一个带有"ip modify"属性函数注册tracing(这样regs->ip就可以被修改),'I’将显示可以被覆盖函数同一行上。 如果体系架构支持,它还将显示函数直接调用回调。...默认情况下,“record-tgid”选项被禁用。 set_event 也可以系统特定事件触发时候打开跟踪。...使用 function_graph 跟踪器时使用;缺省为对所有函数都生成调用关系序列,可以通过写该文件来指定需要特别关注函数。...这个信息用来解析二进制trace流,其中字段也可以event filter中找到对它使用。 它还显示用于文本模式下打印事件格式字符串,以及用于分析事件名称和ID。...stacktrace triggering event发生时,这个命令trace buffer中dump出堆栈调用

    2.5K41

    Python -- pdb调试工具

    ,有漂亮颜色,和补全提示,以及bash混用; 相对于python内置pdb,ipdb优势也正在于此,其实就是对ipython调用: import ipdb ipdb.set_trace...“n”回车,将会执行addition = add(sys.argv[1], sys.argv[2]),然后打印出下一步操作; 但是会有一个问题,pdb没有进入到add函数中,下面的s选项可以解决此问题...4、打印 -> p  执行过程中我们想看,某个变量打印值,除了c可以直接跳到下一个断点,打印期间所有值 “p”可以打印出某个变量值,但前提是已经执行过这个变量。如下: ?...5、单步 -> s  “s”可以进入某个函数内部,然后再函数内使用n/p/b/c等 “r”将返回前面进入函数返回语句 ?...6、添加动态断点 -> b  程序里,我们设置了一个断点,但当我们执行很长代码时,忘了脚本中设置断点 我们就可以直接用“b”在此环境下设置下一个断点位置 格式:b  行数 7、列表 -> l

    1.3K30

    conan入门(十八):Cannot recognize the Windows subsystem, install MSYS2cygwin or specify a build_require

    看提示应该是在编译boost依赖库libiconv/1.16报错,linux下交叉编译并不会报这个错误, 原因就是没有指定-pr:b参数(--profile:build) 大多数情况下交叉编译-pr...:b不是必须,只要用-pr:h指定目标主机profile文件就可以了。...但是对于libiconv/1.16这样Windows下编译要需要依赖MSYS2环境来执行bash shell脚本来完成编译 以下代码摘自libiconv/1.16conanfile.py...("msys2/cci.latest") 如果不指定-pr:b参数,上面的条件就不成立,会导致编译libiconv时没有msys2环境, 所以这种情况下安装交叉编译不仅要用-pr:h指定目标主机profile...-pr:b default --build missing -o without_stacktrace=True 指定了-pr:b defaultr执行时会自动下载安装msys2 关于boost交叉编译参见我之前博客

    39110

    Redis Lua脚本调试

    可以使用Redis unstable来调试稍后稳定版本Redis中运行脚本,因此调试器已经可用于实际术语。...但是,可以通过遵循服务器实现简单协议来开发其他客户端。 默认情况下,每个新调试会话都是分叉会话。这意味着调试Redis Lua脚本时,服务器不会阻塞并可用于开发或者为了并行执行多个调试会话。...请注意,启动调试器时,它将以步进模式启动。它将停止脚本第一行,它在执行之前实际执行某些操作。 从这一点开始,您通常会调用step以执行该行并转到下一行。...该print命令就是这样,并在调用帧中执行查找,从当前一个回到之前一个,直到顶层。这意味着即使我们进入Lua脚本嵌套函数,我们仍然可以使用print foo查看foo调用函数上下文中值。...没有变量名称情况下调用时,print将打印所有变量及其各自值。 该eval命令在当前调用上下文之外执行小块Lua脚本(使用当前Lua内部结构无法在当前调用上下文中进行评估)。

    2.6K50

    shell expect权威指南和实战

    注意: (1)该脚本没有使用spawn命令。 (2)该expect脚本会与任何调用脚本进程交互。 (3)如果该脚本名为prompt,那么它可以用在任何C风格shell中。...#(3)如果脚本第一个参数是小写"i",那么变量nofile被设置为1,否则通过调用Tcl函数isfile来验证参数指定文件存在,如果不存在就报错退出。...然后,调试器启动以后,剩下命令才会被执行。...“-b”选项可以让expect一次只读取脚本一行。当你没有写完整个脚本时候,这是十分有用,expect可以开始执行这个不完整脚本,并且,它可以避免把脚本写入到临时文件中。...,在其中调用另外一个expect脚本(scp_key_to_node.exp),两个脚本放在同一个目录下: (1)bash脚本:send_key.sh #!

    1.9K21
    领券